Android动画目前分为三种:
Frame Animation 帧动画,通过顺序播放一系列图像从而产生动画效果,。图片过多时容易造成OOM(Out Of Memory内存用完)异常。
Tween Animation 补间动画(又叫view动画),是通过对场景里的对象不断做图像变换(透明度、缩放、平移、旋转)从而产生动画效果,是一种渐进式动画,并且View动画支持自定义。实现原理是view.startAnimation的时候调用invalidate,view在执行draw函数的时候,通过时间差值器换算出当前动画进行的百分比,从而得到相应的动画变化Transition(getTransfomation方法),作用在画布或者RenderObject上,影响绘制的内容,在因为measure layout中都没有相应的动画改变逻辑所以实际上没有改变view的位置大小。
Animator属性动画,源码实现是,Animator在start的时候,将自己作为callback注册到单例类AnimationHandler中,而AnimationHandler想底层注册了vsync信号的监听,有vsync来刷屏幕时,会调用到Animatior的doAnimationFrame->animateBasedOnTime->animateValue()计算。在ValueAnimator中计算value调用mUpdateListeners.get(i).onAnimationUpdate(this);在ObjectValue中将value通过jni传给native方法,修改对应的对象参数。即view.setX(float value)从而产生动画效果。
补间动画和属性动画的区别
补间动画只是改变了View的显示效果而已,并不会真正的改变View的属性。而属性动画可以改变View的显示效果和属性。举个例子:例如屏幕左上角有一个Button按钮,使用补间动画将其移动到右下角,此刻你去点击右下角的Button,它是绝对不会响应点击事件的,因此其作用区域依然还在左上角。只不过是补间动画将其绘制在右下角而已,而属性动画则不会。
帧动画和补间动画 看https://blog.csdn.net/qq475703980/article/details/93243968
属性动画看https://blog.csdn.net/weixin_39001306/article/details/80614286
源码
网友评论