Android开发艺术探索 第7章 动画深入分析

Android动画可以分为三种:View动画,帧动画和属性动画;属性动画为API11的新特性,在低版本是无法直接使用属性动画的。

本章主要学习内容:

  • 1.View动画以及自定义View动画

  • 2.View动画的一些特殊使用场景

  • 3.对属性动画做了一个全面的介绍

  • 4.使用动画的一些注意事项


7.1View动画

  • 1.View动画的四种变换效果对应着Animation的四个子类:TranslateAnimation(平移动画)、ScaleAnimation(缩放动画)、RotateAnimation(旋转动画)和AlphaAnimation(透明度动画),他们既可以用代码创建也可以用XML来定义,推荐使用可读性更好的XML来定义
  • 2.标签标示动画集合,对应AnimationSet类,他可以包含若干个动画,并且他的内部也可以嵌套其他动画集合。android:interpolator标示动画集合所采用的差值器,差值器影响动画速度,比如非匀速动画就需要通过差值器来控制动画的播放过程。android:shareInterpolator表示集合中的动画是否和集合共享同一个差值器,如果集合不指定差值器,那么自动化就需要单独制定所需要的差值器或者默认值。
  • 3.Animation通过setAnimationListener方法可以给View动画添加过程监听
  • 4.自定义View动画只需要继承Animation这个抽象类,并重写initialize和applyTransformation方法,在initialize方法中做一些初始化工作,在applyTransformation中进行相应的矩阵变换,很多时候需要采用Camera来简化矩阵变换过程。
  • 5帧动画是顺序播放一组预先定义好的图片,类似电影播放;使用简单但容易引发OOM,尽量避免使用过多尺寸较大的图片。

7.2View动画的特殊使用场景

  • 1.LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,当它的子元素出场的时候都会具有这种动画,ListView上用的多,LayoutAnimation也是一个View动画。

使用LayoutAnimation

  • 2.Activity/Fragment的切换效果 在startActivity(Intent)或finish()之后调用overridePendingTransition(int enterAnim,int exitAnim)方法。 Fragment也可以添加切换效果,通过FragmentTransaction中的setCustomAnimations()方法来添加;需要考虑兼容性使用View动画,属性动画是API11新引入的。

7.3属性动画

AnimatorSet、ObjectAnimator、TimeAnimator、ValueAnimator

  • 1.属性动画可以对任意对象的属性进行动画而不仅仅是View,动画默认间隔300ms,默认帧率10ms/帧。在一个时间间隔内完成对象从一个属性值到另一个属性值的改变。

  • 2.android:propertyName表示属性动画的作用的属性的名称。*

    android:duration表示动画的时长

    android:valueFrom表示动画的起始值

    android:valueTo表示属性的结束值

    android:startOffset表示动画的延迟时间,当动画开始后,需要延迟多少毫秒才会真正播放次动画。

    android:repeatCount表示动画的重复次数(默认为0,其中-1表示无限循环)

    android:repeatMode表示动画的重复模式(repeat和reverse可选,表示连续重复和逆向重复)

    android:valueType表示android:propertyName所指定的属性的类型,可选intType/floatType。如果android:propertyName指定的属性表示颜色,则不需要指定该属性。

7.3.2理解差值器和估值器
  • 1.时间差值器(TimeInterpolator)的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比,系统预置的有LinearIn特rpolator(线性插值器:匀速动画),AcceletateDecelerateInterpolator(加速减速差值器:动画两头慢中奖快),DecelerateInterpolator(减速差值器:动画越来越慢)

  • 2.估值器(TypeEvaluator)的作用是根据当前属性改变的百分比来计算改变后属性值。系统预置有IntEvaluator,FloatEvaluator,ArabEvaluator

  • 3.差值器和估值器除了系统提供之外,我们还可以自定义。自定义差值器需要实现Interpolator或者TimeInterpolator;自定义估值器算法需要实现TypeEvaluator

7.3.4对任意属性做动画
  • 1.属性动画要求作用的对象提供该属性的get和set方法,缺一不可

  • 2.如果你的对象没有对应的get和set方法

    • 请给你的对象加上get和set方法,如果你有权限的haul(如果直接使用系统的类,是无法加上的)

    • 用一个类来包装原始对象,简介为期提供get和set方法

    • 采用ValueAnimator,监听动画过程,自己实现属性的改变

7.3.5属性动画的工作原理

通过反射调用get/set方法;属性动画需要运行在有Looper的线程中。

7.4使用动画的注意事项

  • 1.使用帧动画时,当图数量较多且图片分辨率较大的时候容易出现OOM,需注意,尽量避免使用帧动画
  • 2.使用无限循环动画的时候,在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄漏
  • 3.View动画View的影像做动画,并不是真正的改变了View的状态,因此有时会出现动画完成后View无法隐藏(setVisibility(View.Gone)失效),这时候调用view.clearAnimation()清理View动画即可解决
  • 4.不要使用px,使用px会导致不同设备上有不同的效果
  • 5.View动画是对View的影像做动画,View的真实位置没有变动,也就导致点击View动画后的位置触摸事件不会响应,属性动画不存在这个问题
  • 6.使用动画的过程中,使用硬件加速可以提高动画的流畅度
  • 7.动画在3.0以下的系统存在兼容性问题,特殊场景可能无法正常工作,需要做好适配工作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值