是什么
view的属性平滑的过渡
属性动画
补间动画与属性动画的区别
https://juejin.im/post/5b0e852b6fb9a00a0b150ca8
https://juejin.im/post/5d04610be51d45775a700309#heading-3
https://juejin.im/post/5d09990bf265da1bd260ef52
补间动画
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.alpha_anim);
img = (ImageView) findViewById(R.id.img);
img.startAnimation(animation);
原理分析
https://blog.csdn.net/anhenzhufeng/article/details/80775824
补间动画的核心本质就是在一定的持续时间内,不断改变 Matrix 变换,并且不断刷新的过程。
操纵的是canvas,没有改变view的位置,宽高
canvas.translate(-transX, -transY);
canvas.concat(transformToApply.getMatrix());//在这里调用canvas的concat方法,实现最终的平移效果 (做矩阵相乘)
canvas.translate(transX, transY);
applyLegacyAnimation()
记录动画第一帧的时间
根据当前时间到动画第一帧的时间这之间的时长和动画应持续的时长来计算动画的进度
把动画进度控制在 0-1 之间,超过 1 的表示动画已经结束,重新赋值为 1 即可
根据插值器来计算动画的实际进度
调用 applyTransformation() 应用动画效果
Choreographer.doCallbacks
三种不同类型的操作(输入,动画,遍历)
doAnimationFrame()方法
为什么补间动画只是改变view的视觉,他本来也就是仅仅改变了view的canvas中的bitmap(区域)而已.
属性动画
ObjectAnimator anim = ObjectAnimator.ofFloat(myView, “rotation”, 0f, 360f);
anim.setDuration(1000);
anim.start();
ValueAnimator
TimeInterpolator 决定了动画从初始值过渡到结束值的节奏
TypeEvaluator 决定了动画如何从初始值过渡到结束值。
alpha
scaleX
scaleY
translationX
translationY
AnimatorSet set = new AnimatorSet();
著名的开源库:lottie-android
转场动画
在Android 5.0当中,Google基于Android 4.4中的Transition框架引入了转场动画,
设计转场动画的目的,在于让Activity之间或者Fragment之间的切换更加自然,
其根本原因在于界面间切换时的动画不再是以Activity或者Fragment的整个布局作为切换时动画的执行单元,而是将动画的执行单元细分到了View。
目前提供的转场动画分为两种:
Content Transition:用于两个界面之间非共享的View。
Shared Element Transition:用于两个界面之间需要共享的View
https://www.jianshu.com/p/510e415c56f2