三谈属性动画——Keyframe以及ViewPropertyAnimator
Posted xingfeng_coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三谈属性动画——Keyframe以及ViewPropertyAnimator相关的知识,希望对你有一定的参考价值。
android动画和Transition系列文章
- 初识属性动画——使用Animator创建动画
- 再谈属性动画——介绍以及自定义Interpolator插值器
- 三谈属性动画——Keyframe以及ViewPropertyAnimator
- 让View具有减速效果的动画——FlingAnimation
- 让View具有弹性效果的动画——SpringAnimation
- 让View跟随状态动起来——StateListAnimator
- 仿抖音发布按住拍呼吸效果
- Jetpack学习之——使用动画缩放图片
- 使用动画隐藏或显示View
- Android中具有动画效果的图片资源
- ViewGroup内容改变时的动画效果—LayoutTransition
- 在布局切换之间实现Transition动画
- 在Activity切换之间实现Transition动画
- 让转场更加酷炫——自定义Transition
经过初识属性动画——使用Animator创建动画和再谈属性动画——介绍以及自定义Interpolator插值器,对属性动画已经介绍的差不多了,还剩下最后两个概念,Keyframe和ViewPropertyAnimator。
Keyframe
动画归根结底是一些帧的组合,一旦设定了一个动画后,中间的每帧,Android系统会帮我们计算好,而Keyframe允许我们定义动画中的一些关键帧,该对象主要有fraction和value组成,其中fraction代表着动画的进度、value代表着动画的值,可以设置单独的Interpolator,这个Interpolator作用于前一帧与当前帧。
举个例子:
val kf1 = Keyframe.ofFloat(0.2f, 100f).apply
interpolator = AnticipateInterpolator()
val kf2 = Keyframe.ofFloat(0.4f, 200f).apply
interpolator = LinearInterpolator()
val kf3 = Keyframe.ofFloat(0.6f, 300f)
val kf4 = Keyframe.ofFloat(0.8f, 400f).apply
interpolator = BounceInterpolator()
val kf5 = Keyframe.ofFloat(1.0f, 500f).apply
interpolator = SpringInterpolator(0.2f)
btnMove.setOnClickListener
ObjectAnimator.ofPropertyValuesHolder(tvShow,
PropertyValuesHolder.ofKeyframe(View.TRANSLATION_Y, kf1, kf2, kf3, kf4, kf5)).apply
duration = 3000
start()
上面代码定义了5个Keyframe,分别设置了不同的Interpolator,然后再用PropertyValuesHolder包装一下,最终效果如下:
ViewPropertyAnimator
如果想在一个View上使用属性动画,可以这么操作:
val animX = ObjectAnimator.ofFloat(myView, "x", 50f)
val animY = ObjectAnimator.ofFloat(myView, "y", 100f)
AnimatorSet().apply
playTogether(animX, animY)
start()
当然,也可以这么操作:
val pvhX = PropertyValuesHolder.ofFloat("x", 50f)
val pvhY = PropertyValuesHolder.ofFloat("y", 100f)
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvhY).start()
可以发现,都是挺麻烦的。View作为最常被动画的对象,Android提供了一种封装,这就是ViewPropertyAnimator,使用方式也是很简单,比如上面的代码等效于:
myView.animate().x(50f).y(100f)
View.animate()方法会返回一个ViewPropertyAnimator,该对象具备View的常用属性的变换,比如:
- transitionX、transitionY、transitionZ
- rotation、rotationX和rotationY
- scaleX、scaleY
- x、y、z
- alpha
总结
至此,学习完了属性动画的知识点,属性动画在Android Transition框架中很重要,是构成各种转场动画的关键,会实现各种酷炫的动画是很厉害的,但其实都离不开这些基础,剩下的更多是数学。
关于代码,参考Github
参考
- https://developer.android.google.cn/guide/topics/graphics/prop-animation#keyframes
- https://developer.android.google.cn/reference/android/animation/Keyframe
- https://developer.android.google.cn/reference/android/view/ViewPropertyAnimator
关注我的技术公众号,不定期会有技术文章推送,不敢说优质,但至少是我自己的学习心得。微信扫一扫下方二维码即可关注:
以上是关于三谈属性动画——Keyframe以及ViewPropertyAnimator的主要内容,如果未能解决你的问题,请参考以下文章
再谈属性动画——介绍以及自定义Interpolator插值器
让View具有弹性效果的动画——SpringAnimation