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 向前甩一定值后再回到原来位置