android动画分为View动画 帧动画 属性动画

View动画
  1. View动画包括平移,透明,缩放,旋转。用xml文件在res/anim创建 set标签做动画集合。interpolator插值器来改变动画是速度;shareInterpolator是否共享插值器。用duration改变动画时间,fillafter表示动画结束是否停留。最后通过AnimationUtils调用anim文件。可以setAnimationListerner添加动画监听。

自定义view动画
  1. 派生新动画只需要继承Animation重写initializeapplytransformation,在initialize做初始化工作,在applytransformation相应矩阵变换。使用Camera简单实现3D效果。
帧动画
  1. 系统提供AndroidDrawable类使用帧动画,xml可以在drawableanimation-list标签。注意避免图片过大引起OOM.
  2. LayoutAnimation作用于viewGroup,常备用于listview等。
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
        android:delay="30%"
        android:animationOrder="reverse"
        android:animation="@anim/slide_right"/>

android:delay表示动画播放的延时,既可以是百分比,也可以是float小数。
android:animationOrder表示动画的播放顺序,有三个取值normal(顺序)reverse(反序)random(随机)
android:animation指向了子控件所要播放的动画
为ViewGroup指定android:layoutAnimation=”@anim/list_anim_layout”这样我们的listview的item就可以有出场动画了。


activity切换效果
  1. overridePendingTransition(R.anim.zoomin, R.anim.zoomout)第一个参数是打开动画,第二个参数是暂停动画
    淡入淡出的效果Android的包中已经提供了,
    overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    左右滑动的效果Android的效果也提供了,
    overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
    fragment可以通过fragmentTrasactionsetCustomAnimation来切换动画。
    注意必须startActvity或者finish后面调用

属性动画
  1. 属性动画可以对任意对象做动画,但是它是从API 11才有的,所以存在兼容性问题,可以考虑使用开源动画库nineoldandroids。
  2. 常用动画类ValueAnimatorObjectAnimatorAnimatorset
  3. 属性android:repeatMode表示动画的重复模式,repeat表示连续重复播放,reverse表示逆向重复播放,也就是第一次播放完后第二次倒着播放动画,第三次还是重头开始播放动画,第四次再倒着播放。porpertyName属性名称,假如指定了是color,不需要指定valuetype。
  4. 插值器和估值器:属性动画实现非匀速动画的重要手段
    时间插值器TimeInterpolator的作用是根据时间流逝的百分比计算出当前属性值改变的百分比,系统内置的插值器有线性插值器LinearInterpolator、加速减速插值器AccelerateDecelerateInterpolator和减速插值器DecelerateInterpolator
    类型估值器(TypeEvaluator)的作用是根据当前属性改变的百分比计算出改变后的属性值,系统内置的估值器有IntEvaluatorFloatEvaluatorArgbEvaluator
  5. 动画监听器
    AnimatorListener:监听动画的开始、结束、取消以及重复播放;
    AnimatorUpdateListener监听动画的整个过程,动画每播放一帧的时候onAnimationUpdate方法就会被回调一次
  6. 属性动画的工作原理:属性动画需要运行在有Looper的线程中,反射调用get/set方法。对任意属性做动画的方法:用一个类封装原始对象或者ValueAnimator
  7. 使用动画的注意事项 1)属性动画中的无限循环动画需要在Activity退出的时候及时停止,否则将导致Activity无法释放而造成内存泄露。view动画不存在这个问题;2)view动画的问题:view动画是对view的影像做动画,并不是真正的改变view的状态,因此有时候动画完成之后view无法隐藏,即setVisibility(View.GONE)失效了,此时需要调用view.clearAnimation()清除view动画才行;3)不要使用px;