Android 属性动画和补间动画的区别和特性

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luzaiyy611/article/details/82083213

补间动画

  • 补间动画,主要是向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 
                    })

 区别和特性

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进行任意操作

展开阅读全文

没有更多推荐了,返回首页