- View 动画、帧动画、属性动画
7.1 View 动画
- 帧动画也属于 View 动画。
名称 |
名称 |
标签 |
作用 |
TranslateAnimation |
平移 |
<translate |
移动 |
ScaleAnimation |
缩放 |
<scale |
缩放 |
RotateAnimation |
旋转 |
<rotate |
旋转 |
AlphaAnimation |
透明度 |
<alpha |
透明度 |
- <set 表示动画集合 对应 AnimationSet
7.1.2 自定义 View 动画
- 继承 Animation 重写 initialize、applyTransformation(相应的矩阵变换)
7.1.3 帧动画
- 顺序播放一组预先定义好的图片,类型电影播放
- AnimationDrawable
- <animation-list
- 比较容易引起 OOM,避免使用过多尺寸较大的图片
7.2 View动画的特殊使用场景
7.2.1 LayoutAnimation
- 作用yu ViewGroup,子元素出场都带有动画效果
<layoutAnimation
android:delay = "0.5"
android:animationOrder = "normal|reverse|random"
android:animation="" 指定入场动画
1.通过 android:layoutAnimation 使用
2.LayoutAnimationController 使用
- 动画默认刷新率为 10ms/帧
7.2.2 Activity切换效果
- overridePendingTransition
- 必须位于 startActivity 或 finish 后面
7.3 属性动画
- 是 API 11 新加入特性
7.3.1 使用属性动画
- 可以对任意对象的属性进行动画,不仅是 View
ObjectAnimator.ofFloat(myObject,"translationY",-myObject.getHeight()).start();
- <objectAnimator
- <animator
- 使用
AnimatorInflater.loadAnimator
7.3.2 理解插值器和估值器
- TimeInterpolator:时间插值器,根据时间流逝的百分比计算出当前属性值改变的百分比,预置(LinearInterpolator、AccelerateDecelerateInterpolator、DecelerateInterpolator)
- TypeEvaluator:类型估值算法,估值器,根据当前属性改变的百分比计算改变后的属性值,预置(IntEvalurot、FloatEvaluator、ArgbEvaluator)
- 属性动画要求对象必需有 set、get(可选)
- 自定义插值器要实现 Interpolator 或者 TimeInterpolator
- 自定义估值器要实现 TypeEvaluator
7.3.3 属性动画的监听器
- AnimatorupdateListener
- AnimatorListener
7.3.4 对任意属性做动画
- 条件
1.必需提供 setXXX 方法,如果没有初始值,还需要提供 getXXX
2.改变必需通过某种方法反映出来,比如会带来 UI 改变之类
- 一定要使用属性动画
1.加上 get 和 set 方法
2.用一个类来包装原始对象,间接提供 get 和 set 方法
3.采用 ValueAnimator(本身不作用于任何对象),监听动画过程,自己实现属性的改变
7.3.5 属性动画的工作原理
- 属性动画要求动画作用的对象提供该属性的 set 方法,属性动画根据你传递的该属性的初始值和最终值,以动画的效果多次调用 set 方法。随着时间的推移,所传递的值越来越接近最终值。
7.4 使用动画的注意事项
事项 |
|
OOM |
主要出现在帧动画中,图片数量多,且比较大容易出现 |
内存泄露 |
无限循环动画,要在 Activity 退出是及时停止 |
兼容性问题 |
3.0以下有兼容性问题 |
View动画问题 |
1.只是对View做影像,没有改变 View的位置,有时候 setVisibility(GONE) 失效,要使用 view.clearAnimation |
不要使用 px |
兼容问题 |
动画元素交互 |
3.0以前,无法交互 |
硬件加速 |
使用动画过程中,建议开启硬件加速,提高动画流畅性能 |