Android属性动画和补间动画的区别和特性
补间动画
补间动画,主要是向View对象设置动画效果,包括AlphaAnimation 、RotateAnimation 、ScaleAnimation 、
TranslateAnimation 这4种效果,对应的xml标签分别是alpha、rotate、scale、translate。通过为动画设置初始和终⽌对应的值,根据插值器和duration计算动画过程中间相应的值实现平滑运动,即设置初始和终⽌状态,插值器来计算填补初始状态到终⽌状态间的动画
使⽤
1、设置相应动画效果的起点值、终点值、duration(时长)、Interpolator(加速度)。(注:RotateAnimation还需要设置旋转中
⼼坐标值)
2.Interpolator:插值器,随时间流逝动画路程所应⾛过的百分⽐。⽐如,若设置为LinearInterpolator(匀速),时间过⼀半则插值
器的值是0.5;若设置的是DecelerateInterpolator(加速插值器),时间过⼀半则插值器的值⼤于0.5
val transAnimation = TranslateAnimation(text.x, 100F,text.y,395f)
transAnimation.duration=2000
transAnimation.interpolator = BounceInterpolator()
text.startAnimation(transAnimation)
属性动画
属性动画可以对任何对象的属性做动画⽽不仅仅是View,甚⾄可以没有对象。除了作⽤对象进⾏扩展外,属性动画的效果也加强了,不仅能实现View动画的4中效果,还能实现其它多种效果,这些效果都是通过ValuAnimator或ObjectAnimator、AnimatorSet等来实现的。
使⽤
1、设置作⽤对象、属性的起点值、属性的终点值、TypeEvaluator(路线)、duration(时长)、Interpolator(加速度)。 ValueAnimator基本使⽤
val valueAnimator = ValueAnimator.ofInt(0,100)
valueAnimator.duration =2000
valueAnimator.interpolator = AccelerateDecelerateInterpolator()
valueAnimator.addUpdateListener({
var intValue = it.animatedValue
//do something with intValue
})
View属性动画原理:属性动画要求作⽤的对象(如View)提供该属性(如View的scaleX属性)的getter、setter⽅法(如setScaleX()⽅法)。属性动画根据作⽤对象的属性的起点值、终点值、TypeEvaluator在动画过程中据插值器(Interpolator)计算当前时间对应的值然后作⽤到相应的属性上从⽽使作⽤对象发⽣相应的改变。
ObjectAnimator基本使⽤(text为⼀个textView,下图为⼀个快速使⽤⽅法)
text.animate()
.translationX(100f)
.translationY(100f)
.setDuration(2000)
.setInterpolator(AccelerateDecelerateInterpolator())
.withEndAction({
//do something
})
区别和特性
canvas动画
1.  补间动画:只产⽣了⼀个动画效果,其真实的坐标并没有发⽣改变(只是改变了View的显⽰效果⽽已,并不会真正的改变View的属性)。View做在做动画的时候,它并没有真正的移动它的位置,⽽是根据动画时间的插值,计算出⼀个Matrix,然后不停的invalidate,在onDraw中的Canvas上使⽤这个
计算出来的Matrix去draw这个View的内容,并有onLayout中还是原来的位置,所以点击事件只能点击到原来的位置才能触发
2. ObjectAnimator:⼀般直接⽤与View,要求作⽤的View提供该属性(如View的scaleX属性)的getter、setter⽅法(如setScaleX()⽅法),可以直接改变view的属性所以View的位置也跟随属性的改变⽽改变,点击事件的触发位置为动画结束的位置。
3. ValueAnimator:属性动画的核⼼,这个我理解为数值动画,ObjectAnimator也只不过是通过不断改变的数值然后赋值给相应的属性⽽已。通过设置初始和终点值,ValueAnimator 会通过相应的Interpolator  和duration 计算出平滑的数值变化,然后可以通过得到的Value进⾏任意操作

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。