Android动画笔记

View动画

  1. View动画
    对View进行图像变换:
    平移  TranslateAnimation<translate>
    缩放 ScaleAnimation<scale>
    旋转 RotateAnimation<rotate>
    透明 AlphaAnimation<alpha>
    interpolator 插值器。动画速度
    shareInterpolator 集合中动画是否共享插值器
    缩放、旋转需要注意轴点的概念
  2. 帧动画
    顺序播放对象,图片过大会OOM
  3. 属性动画
    低版本需要进行兼容

特殊场景

  • 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方法,再利用估值器改变属性。

容易出现的问题

  1. OOM
    帧动画图片数量多时易出现,所以少用帧动画。
  2. 内存泄漏
    属性动画中有无限循环的动画,View动画不存在这种。
  3. 兼容性问题
    尤其是3.0以下的系统
  4. View动画问题
    View动画是对View影像做动画,并不改变View状态。偶现动画完成后Gone属性失效。使用view.clearAnimation可解决。
  5. 不要使用px
    清楚dp与px的区别即可。
  6. 动画元素交互
    View移动后,在3.0以前系统上点击事件触发位置仍在老位置;在3.0以后的系统上变为移动后为位置。
  7. 硬件加速
    开启硬件加速,可以提高动画流畅性。

《Android开发艺术探索》

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容