动画总结:Android 动画总结
面试题持续更新中~~
文章目录
1 动画分类
1.1 动画类型有哪几种?它们的区别在哪里?
两种。视图动画、属性动画
视图动画包括:逐帧动画(frame-by-frame animation)、补间动画(tweened animation)
属性动画包括:ValueAnimator、ObjectAnimator 、AnimatorSet
区别:视图动画只能作用于View,而属性动画能作用于任何对象。
1.2 两种动画类型它们的优缺点分别是什么?
视图动画:
优点:使用简单,并且设置需要的时间较短。
缺点:
只能对公开对象的部分添加动画效果(例如:可以对View缩放和旋转添加动画,但无法对背景颜色这样做);
只能对绘制视图的位置进行修改,而不能修改实际的视图本身(例如:View位移到了上方,但是其点击区域还是在原来的地方)。
属性动画:
优点:相比视图动画,使用相对复杂,设置需要的时间更长。
缺点:
可以为任何对象(视图和非视图)的任何属性添加动画效果;
能够修改实际对象本身。
1.3 为什么视图动画只能修改视图而无法改变自身属性?
视图动画是通过父view来不断调整子view的画布canvas坐标系来实现的,发生动画的其实是父View而不是该view。所以补间动画其实只是调整了子view画布canvas的坐标系,其实并没有修改任何属性,所以只能在原位置才能处理触摸事件。
2 视图动画
2.1 帧动画在使用时需要注意什么?
1.OOM问题 - 这个问题主要出现在帧动画中,当图片数量较多且图片较大时就容易出现OOM,这个在实际开发中尤其注意,尽量避免使用帧动画。
2.内存泄漏 - 在属性动画中有一类无线循环的动画,这类动画需要在Activity退出时及时停止,否则将会导致Activity无法释放从而造成内存泄漏,通过验证后发现View动画并不存在此问题。
3.View动画的问题 - View动画是对View的影像做动画,并不是真正地改变View地状态,因此有时会出现动画完成后View无法隐藏地现象,即setVisibility(View.GONE)失效了,这个时候只要调用view.clearAnimation()清楚View动画即可解决此问题。
4.硬件加速 - 使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。
2.2 帧动画如果避免OOM?
减少帧数、压缩图片