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

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

本章主要学习内容:算法

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

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

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

  • 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/帧。在一个时间间隔内完成对象从一个属性值到另外一个属性值的改变。lua

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

    android:duration表示动画的时长orm

    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如下的系统存在兼容性问题,特殊场景可能没法正常工做,须要作好适配工做。
相关文章
相关标签/搜索