您的位置:首页 > 移动开发 > Android开发

第七章 Android动画深入分析

2017-01-25 13:17 148 查看

7.1 View动画

(1). android动画分为view动画、帧动画和属性动画,属性动画是API 11(Android 3.0)的新特性,帧动画一般也认为是view动画。

(2).
AnimationSet
的属性
android:shareInterpolator
表示集合中的动画是否共享同一个插值器,如果集合不指定插值器,那么自动化需要单独制定所需要的插值器或者使用默认值。

(3). 自定义动画需要继承
Animation
抽象类,并重新它的
initialize
applyTransformation
方法,在initialize方法中做一些初始化工作,在applyTransformation方法中进行相应的矩阵变化,很多时候需要采用
Camera
类来简化矩阵变换过程。

(4). 帧动画使用比较简单,但是容易引起OOM,所以在使用的时候应尽量避免使用过多尺寸较大的图片。

7.2 View动画的特殊使用场景

(1). 布局动画(
LayoutAnimation
)属性分析

<layoutAnimation
xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="reverse"
android:animation="@anim/anim_item"/>


android:delay
:表示子元素开始动画的时间延迟,比如子元素入场动画的事件周期是300ms,那么0.5表示每个子元素都需要延迟150ms才能播放入场动画。

给ViewGroup指定LayoutAnimation的两种方式

//xml
android:layoutAnimation="xxx"
//java
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutANimation(controller);


(2). Activity切换效果 在startActivity方法后或者finish方法之后调用
overridePendingTransition(int inANim, int outAnim)
方法设置进入或者退出的动画效果。

7.3 属性动画

(1). 属性动画可以对任意对象的属性进行动画而不仅仅是view,动画默认的时间间隔是
300ms
,默认帧率是
10ms/帧


(2). 属性动画几乎无所不能,但是它是从API 11才有的,所以存在兼容性问题,可以考虑使用开源动画库nineoldandroids。它的功能和系统原生的
android.animations.*
中的类的功能完全一致,使用方法完全一样,只要我们使用nineoldandroids编写动画,那么就能运行在所有的android系统上。

(3). 属性
android:repeatMode
表示动画的重复模式,
repeat
表示连续重复播放,
reverse
表示逆向重复播放,也就是第一次播放完后第二次到这播放动画,第三次还是重头开始播放动画,第四次再到这播放,以此类推。

(4). 插值器和估值器:属性动画实现非匀速动画的重要手段

事件插值器(
TimeInterpolator
)的作用是根据事件流逝的百分比计算出当前属性值得百分比,系统内置的插值器有线性插值器(
LinearInterpolator
)、加速插值器(
AccelerateDecelerateInterpolator
)和减速插值器(
DecelerateInterpolator
)。

类型估值器(
TypeEvalutor
)的作用是根据当前属性改变的百分比计算出改变后的属性值,系统内置估值器有
IntEvaluator
FloatEvaluator
ArgbEvaluator


(5). 动画监听器

AnimatorListener
:监听动画的开始、结束、取消以及重复播放;

AnimatorUpdateListener
:监听动画的整个过程,动画每播放一帧的时候
onAnimationUpdate
方法就会被回调一次。

(6). 对任意属性做动画的方法:封装原始对象或者
ValueAnimator


(7). 属性动画的工作原理:属性动画需要运行在有Looper的线程中,反射调用get/set方法。

7.4 使用动画的注意事项

(1). OOM:尽量避免使用帧动画,使用的话尽量避免使用过多尺寸较大的图片;

(2). 内存泄露:属性动画中的无限循环动画需要在Activity退出的时候即时停止,否则将导致Activity无法释放而造成内存泄露,view动画不存在这个问题。

(3). 兼容性问题:某些动画在3.0以下系统上有兼容性问题;

(4). view动画的问题:view动画是对view的影响做动画,并不是真正的改变view的状态,因此有时候动画完成之后view无法隐藏,即
setVisibility(View.GONE)
失效了,此时需要调用
view.clearAnimation()
清楚view动画才行。

(5). 不要使用px;

(6). 动画元素的交互:在android30.一线的系统上,view动画和属性动画,新位置均无法触发点击事件,同时老位置仍然可以触发单击事件。从3.0开始,属性动画的单击事件触发位置为移动后的位置,view动画仍然在原位置。

(7). 硬件加速:使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。

其他学习资料

代码家的重要的开源项目AndroidViewAnimation

Android样式的开发:View Animation篇

Android样式的开发:Property Animation篇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: