interpolater插值器与属性动画的使用

属性动画:连同控件本身一起动画:

所有的属性动画都是继承于Animator的,Animator下分为ValueAnimator与ViewPropertyAnimator

其中ValueAnimator下又分为ObjectAnimator)(改变一个属性,如只改便拉伸x,拉伸y,)与AnimatorSet(将多个改变结合在一起,如将拉伸x与拉伸y结合在一起,一起做动画)

Animator :

      (1):ValueAnimator

                    ObjectAnimator,AnimatorSet

       (2):ViewPropertyAnimator

一:ObjectAnimator的使用

//image是我视图的id值,表对id值为image的视图做改变

//alpha值是对该图片的哪个属性做改变:拉伸x:scaleX,拉伸y:scaleY,移动x:translationX,移动y:translationY,

                                                                  绕z轴旋转:rotation,绕x轴旋转:rotationX,绕y轴旋转:rotationY

//alpha后面的数,若是只有一个值,那么就从当前的状态变到值的状态,如若只有0f,这alpha从1(本身的状态为1)变到0,

                             若是有多个值,则从前面的值变到后面的值的状态,如这的alpha状态的改变就是从0变到1的

ObjectAnimator.ofFloat(image,"alpha",0f,1f).apply {
duration = 2000
repeatCount = 0
添加动画的监听事件
addListener(object :Animator.AnimatorListener{
override fun onAnimationStart(animation: Animator?) {
//动画开始时
Log.v("lfl","动画开始了")
}

override fun onAnimationEnd(animation: Animator?) {
//动画结束时
Log.v("lfl","动画结束了")
}

override fun onAnimationCancel(animation: Animator?) {
//动画取消时
Log.v("lfl","动画取消了")
}

override fun onAnimationRepeat(animation: Animator?) {
//动画重复时调用
Log.v("lfl","动画在一次被重复了")
}

})
addUpdateListener {
//it(ValueAnimator)是从0到1之间的变化的值,上面ofFloat中values的值是从0到1
Log.v("lfl","数据的变化为$it")
}
addPauseListener {
//当中止动画或者重启动画时调用
}
//启动动画
start()

二:AnimationSet的使用:

  

val v1 =  ObjectAnimator.ofFloat(image,"scaleX",1f,2f)
val v2 = ObjectAnimator.ofFloat(image,"scaleY",1f,2f)
AnimatorSet().apply {
//先后顺序的动画,这个就是先动画v1,在动画v2
// playSequentially(v1,v2)
//一起动画
playTogether(v1,v2)
start()
}


三:ViewPropertyAnimation的使用:
//通过animate()直接访问赋值,但是只能赋一个值,
同时可以赋多个属性的值
image.animate().alpha(0f)
.rotation(360f)
.translationX(2f)
.setDuration(2000)
.start()

两个动画时可用PropertyValuedHolder
//手臂左边移动
val tx = PropertyValuesHolder.ofFloat("translationX",0f)
//手臂上边移动
val ty = PropertyValuesHolder.ofFloat("translationY",0f)
val translate = ObjectAnimator.ofPropertyValuesHolder(mRightArm, tx, ty)

 四:interpolater差值器:

AccelerateDecelerateInterpolator   在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator                     在动画开始的地方速率改变比较慢,然后开始加速

AnticipateInterpolator                      开始的时候向后然后向前甩

AnticipateOvershootInterpolator     开始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator                          动画结束的时候弹起

CycleInterpolator                             动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator                    在动画开始的地方快然后慢

LinearInterpolator                            以常量速率改变

OvershootInterpolator                      向前甩一定值后再回到原来位置

         

原文地址:https://www.cnblogs.com/luofangli/p/14663256.html