引言
Android动画可以帮助我们实现一些炫酷的效果,掌握动画主要在于练习。在面试中更多地根据实际需求回答。
面试题
下面哪一项不属于android的动画类型?
A Tween
B Alpha
C Frame
D Animation
正确答案:D
解析:Android动画有三种:View动画、帧动画、属性动画
Tween(补间动画),即View动画,包括了平移(Translate)、缩放(Scale)、旋转(Rotate)、透明度(Alpha),所以A、B正确。
Frame(帧动画)循序播放一组预先定义好的图片,所以C正确
属性动画(Property Animation)类名是:ValueAnimator、ObjectAnimator
- 下面属于android的动画分类的有?(android3.0之前)
A Tween
B Frame
C Draw
D Animation
正确答案:AB
解析:两种,一种是Tween 动画、还有一种是 Frame 动画。 Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。属性动画是android3.0之后才有的。
动画占用大量内存,如何优化?
- OOM问题:这个问题主要出现在帧动画中,当图片数量较多且图片较大时就极易出现OOM,这个在实际开发中要尤其注意,尽量避免使用帧动画。
- 内存泄露:在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄露,通过验证后发现View动画并不存在此问题。
使用动画的注意事项
- OOM问题:这个问题主要出现在帧动画中,当图片数量较多且图片较大时就极易出现OOM,这个在实际开发中要尤其注意,尽量避免使用帧动画。
- 内存泄露:在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄露,通过验证后发现View动画并不存在此问题。
- 兼容性问题:动画在3.0以下的系统有兼容性问题,在某些特殊场景可能无法正常工作,因此要做好适配工作。
- View动画的问题:View动画是对View的影像做动画,并不是真正改变View的状态,因此有时候会出现动画完成后View无法隐藏的现象,即setVisibility(View.GOEN)失效了,这个时候只要调用view.clearAnimation()清除View动画即可解决问题。
- 不要使用px:在进行动画的过程中,要尽量使用dp,使用px会导致在不用的设备上有不用的效果。
- 动画元素的交互:从3.0开始,将view移动(平移)后,属性动画的单击事件触发位置为移动后的位置,但是View动画仍然在原位置。在Android3.0以前的系统中,不管是View动画还是属性动画,新位置都无法触发单击事件同时,老位置仍然能触发单击事件(因为属性动画在Android3.0以前是没有的,是通过兼容包实现的,底层也是调用View动画)。
- 硬件加速:使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。
开启方法:
在你的Android manifest文件,添加hardwareAccelerated
属性就可以了。可以给整个application添加,也可以单独给一个acitivty添加,该属性默认值为false;
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="true" />
<activity android:hardwareAccelerated="false" />
</application>
推荐