Android Animation
整理自Get Animated (Android Dev Summit ‘18),解释那复杂的Android动画框架和工具。
android.view.animation
:过时的动画过时了,不好用了。包括创建在
R.anim.
中的资源(考虑使用R.animator.
)。当且仅当处理Window Animation时或Fragment Transition的自定义动画需确保View已经measured不得不使用这个,
1
<item name="android:windowEnterAnimation">@anim/foo</item>
android.animation
:从API 11开始的Animator来自
R.animator.
的资源。Animator => ValueAnimator => ObjectAnimator
ValueAniamtor
1
2
3ValueAnimator.ofFloat(1f, 0f).apply {
addUpdateListener { ... }
}.start()ObjectAniamtor
1
ObjectAnimator.ofFloat(view, View.ALPHA, 1f, 0f).start()
PropertyValueHolder是ValueAnimator的内部实现
1
2
3
4
5ObjectAnimator.ofPropertyValueHolder(
view,
PropertyValueHolder.ofFloat(View.ALPHA, 1f, 0f),
PropertyValueHolder.ofFloat(View.SCALE_X, 1f, 0f)
).start()AnimatorSet:属于Aniamtor,管理多个动画
ViewPropertyAnimator:使用了ValueAnimator,但效率更高
1
view.animate()....start()
Transitions:在布局间中切换
用于Shared Element Transition、Window Content Transition、模块化动画。
TransitionManager.beginDelayedTransition(viewGroup)
调用后,修改View,自动启动动画。
AnimatedVectorDrawable: VectorDrawable + Animator
用于Icon Animation、一次性动画、性能要求高的情况。
1
2
3val avd = AppCompatResources.getDrawable(context, R.drawable.avd) as AnimatedVectorDrawable
imageView.drawable = avd
avd.start()Phycisc-based Animation:强交互时提供流畅体验
MotionLayout:饼,真香。