View动画
- View动画
对View进行图像变换:
平移TranslateAnimation
<translate>
缩放ScaleAnimation
<scale>
旋转RotateAnimation
<rotate>
透明AlphaAnimation
<alpha>
interpolator 插值器。动画速度
shareInterpolator 集合中动画是否共享插值器
缩放、旋转需要注意轴点的概念 - 帧动画
顺序播放对象,图片过大会OOM - 属性动画
低版本需要进行兼容
特殊场景
- LayoutAnimation作用于ViewGroup
delay 子元素开始动画时间延时
animationOrder 子元素动画顺序
animation 指定动画 - Activity切换效果
使用overridePendingTranstion(int enterAnim, int exitAnim)方法
enterAnim为Activity启动时动画
exitAnim为Activity结束动画
函数调用需要在startActivity()之后,或者在finish()中
另外,Fragment设置动画需要进行兼容,使用View动画。属性动画和Fragment都是API 11引入的
属性动画
对任何对象使用,并且效果更多;可以使用nineoldandroids动画库兼容旧版本。
- 常用动画类:ValueAnimator, ObjectAnimator,AnimatorSet
xml形式:<objectAnimator/>, <animator/>, <set/> - 插值器、估值器
TimeInterpolator时间插值器,根据时间流逝百分比计算属性值改变的百分比
TypeEvaluator类型估值算法,根据属性改变百分比计算改变后的属性值 - 监听器
AnimatorListener
AnimatorUpdateListener动画每帧播放时会被调用 - 对任意属性做动画
动画生效需要满足两个条件:
1.提供set和get方法,以获取属性初始值。不满足会Crash
2.属性改变需要反映出来。否则无动画效果,不会Crash
解决动画不生效的问题可以使用一下三种方式:
1.为对象添加set、get方法
2.用类包装原有对象,间接提供get和set方法
3.使用ValueAnimator监听动画过程。简单来说就是使用监听器在动画每帧回调onAnimatorUpdate方法,再利用估值器改变属性。
容易出现的问题
- OOM
帧动画图片数量多时易出现,所以少用帧动画。 - 内存泄漏
属性动画中有无限循环的动画,View动画不存在这种。 - 兼容性问题
尤其是3.0以下的系统 - View动画问题
View动画是对View影像做动画,并不改变View状态。偶现动画完成后Gone属性失效。使用view.clearAnimation可解决。 - 不要使用px
清楚dp与px的区别即可。 - 动画元素交互
View移动后,在3.0以前系统上点击事件触发位置仍在老位置;在3.0以后的系统上变为移动后为位置。 - 硬件加速
开启硬件加速,可以提高动画流畅性。
《Android开发艺术探索》