Android 动画总结

2023-05-16

一、动画的本质:View的移动。

View移动分为几种。

1、ScrollTo/ScrollBy: 改变的是View中mScrollX和mScrollY的值。注意正负与安卓坐标系方向相反。不会改变mLeft和mTop值,getTranslationX 也是无值。滚动的是内容。实现比较特殊,是父类在onDraw之前做了canvas变化,不过还是会变换回来。所以父类和内容的getTranslationX 都是无值的。

2、SetTranslationX/SetTranslationY:改变的是DisPlayList中的x偏离属性。可以通过GetTranslationX 获取偏离值。坐标原点为该View的左顶点。并不改改变mLeft和mTop的值。

3、offsetLeftAndRight/offsetTopAndBottom: 通过改变mLeft和mTop来改变位置。

4、利用LayoutParams:setPading或LayoutParams。引起重新布局,会改变View的位置。效率稍低。

5、利用补间动画。矩阵的方式。并不会改变getTranslationX和mleft/mTop值,并且位移后点击事件的位置还是在原来位置。

 

  • 动画的类型。

1、逐帧动画

原理:将动画拆分为 帧 的形式,且定义每一帧 = 每一张图片

·    逐帧动画的本质:按序播放一组预先定义好的图片。

本质上是一段连续的事件调用ImageView或者View的setBackground或者setImageDrawable。

  1. 补间动画

分为AlphaAnimation,ScaleAnimation,TranslateAnimation,RotateAnimation。分析其中的TranslateAnimation 主要是通过applyTransformation。传过来的interpolatedTime和Transformation来变换参数和设置居中。注意居中是Matrix是一个3X3的矩阵,通过暴露一些api,来完成位移,透明度,缩放,错切(Skew).

注意:补间动画也称为View动画,因为是View的onDraw方法支持。补间动画并不会改变mLeft,mTop等值。所以有点击事件的情况下,移动后的位置确没有触发,还是原来的位置。

  1. 属性动画

主要是ValueAnimator和ObjectAnimator。属性动画指的是改变的是View的属性(不是变换矩阵),以位移动画为主主要是上面View移动几种。

ValueAnimator 原理分析。主要有ofInt,ofFloat,ofPropertyValuesHolder,ofObject几种构造方法。接受的参数都是各自子类的数组。

见Xmind。

Interpolator 本质上是一个数学函数,其取数字在0.0和1.0之间,并将其转换为另一个数字。比如线性插值器的函数时y=t;加速插值器时 y=t^(2f)。f默认为1。插值器描述的是0到1变化的时间快慢。每一次Choreographer 回调会调用doAnimationFrame方法。通过frameTime求出时间流逝百分比,传入插值器中得到经过插值器函数加工的值。然后传入到估值器中,也是一个0到1的百分比,估值器就求出来Value值了。

 

 

  • 几个容易混淆的地方
  1. 坐标系。Android的屏幕坐标系和视图坐标系。Android的屏幕坐标系也称为绝对坐标系。屏幕的左上为原点。视图坐标系一般都是以父布局为参照物。以父布局的左上为原点。View中的getLeft,getX等都是这样的。一般视图坐标系用的比较多。

 

  • 总结

复杂动画主要有几大难点

  1. 时间管理。如果利用补间动画,难以管理。
  2. 位移动画中的api选择以及坐标点选择。SetTranslationX。因为这个是相对于View的左边的相对位置。如果利用setX(setTranslationX(x - mLeft))实际是相对父布局的位置。
  3. 位移动画中UI很多提供的不是很准,自己去计算也很繁琐。
  4. 三端效果还是比较难统一,另外调整UI也比较费时间。最好利用lottie动画或者gif动画。
  5. 常用api。缩放利用setScaleX。透明度setAlpha。位移setX或者setTranslationX。注意坐标位置。补间动画不需要detachWindow销毁,View自动完成。属性动画最后detachWindow中进行销毁释放。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 动画总结 的相关文章

随机推荐