动画篇(三)——总结·android动画七问七答

来源:互联网 发布:淘宝买家怎么刷信誉 编辑:程序博客网 时间:2024/05/19 07:09

首先先贴上之前写的关于android动画的内容,有兴趣的小伙伴可以看一看
动画篇(一)——android动画基础
动画篇(二)——android属性动画

这篇文章是对上面两篇文章的一个总结,以问答的方式将知识点进行归纳,有一定基础的小伙伴可以直接来试着解答下面的问题
本人水平有限,文章中如果出现什么不正确或者模糊的地方,还请各位小伙伴留下评论,多多指教 : )
好了,我们现在进入正题


1、anroid动画分为哪几种?简单解释并说明其适合应用的场景。

android动画可以划分为view动画帧动画属性动画
——view动画:通过对场景里的对象不断做图像变换(平移translateion、缩放scale、旋转rotation、透明度alpha),从而产生动画效果,它是一种渐进式动画。适用于非交互性的动画展示。
帧动画:其实也是view动画的一种,它通过顺序播放一系列图像从而产生动画的效果,可以简单理解为图片的快速切换,缺点也很明显,那就是如果图片过多或者过大都会导致OMM(out of memory)。适用于个性化动画的表现。

属性动画:为android3.0之后的新特性,因此之前的版本无法直接使用属性动画,不过可以通过兼容库来使用它。通过调用属性的get和set方法重新设置控件的属性值,实现动画的效果。适用于交互性的动画

2、view动画和属性动画的区别。

view动画就是不断的去调用系统的onDraw方法,去重新绘制组件并显示给用户,而属性动画则是通过调用属性的get和set方法重新设置控件的属性值,实现动画的效果。

3、view动画有哪些局限性

  • view动画只是重绘了动画,改变了显示的位置,但是真正事件响应的位置,却没有发生任何改变。所以,Animation并不适合制作具有交互的动画效果。它只能用来完成一些显示性的效果。

  • 因为Animation的工作原理,上面介绍了,是不断调用系统的onDraw()方法去绘制图像,那么必然十分耗费GPU,效率不高

  • Animation提供了位移、旋转、透明度、缩放这四种动画,虽然经过组合,可以创造出很多的动画效果,但是有时候依然无法制作出复杂好看的动画,即存在动画效果上的局限

4、什么叫插值器和估值器?其作用是什么?

  • TimeInterPolator,中文翻译时间插值器,它的作用是根据时间流逝的百分比来计算当前属性值改变的百分比,系统预设的有LinearInterPolator(线性插值器:匀速动画)、AccelerateDecelerateInterPolator(加速减速插值器:动画两头慢,中间快)、DecelerateInterPolator(减速插值器:动画越来越慢)等。

  • TypeEvaluator,中文翻译为类型估值算法,也叫作估值器,它的作用是根据当前属性改变的百分比来计算改变后的属性值
    属性动画中的插值器和估值器很重要,它们是实现费匀速动画的重要手段。

5、属性动画提供了那几种监听器?

android属性动画提供了2种监听器用于监听动画的播放过程,它们是AnimatorUpdateListener和AnimatorListener
- Animator.AnimatorListener中的接口
onAnimationStart() - 当动画开始的时候调用.
onAnimationEnd() - 动画结束时调用.
onAnimationRepeat() - 动画重复时调用.
onAnimationCancel() - 动画取消时调用.取消动画也会调用onAnimationEnd,它不会关系动画是怎么结束的。
系统还提供了AnimatorListenerAdapter这个类它是AnimatorListener的适配类,这样就可以有选择地实现上面四个方法了,因为不是所有方法都必须实习的。
- AnimatorUpdateListener会监听整个动画过程,我们知道动画是由许多帧构成的,每播放一帧,onAnimatorUpdate就会被调用一次,利用整个特性,我们可以做一些特殊的事情。

6、大致解释一下属性动画的工作原理是什么?

属性动画要求动画作用的对象提供该属性的get和set方法,属性动画根据外界传递的该属性的初始值和最终值,以动画的效果多次去调用set方法。每次传递给set方法的值都不一样 ,确切来说是是随着时间的推移,所传递的值越来越接近最终值。如果动画的时候没有传递初始值,那么还提供get方法,因为系统要去获取属性的初始值。

7、根据属性动画的工作原理,想要让属性动画生效,必须满足那些条件?

必须满足2个条件:
- 第一:object必须提供setAbc方法,如果动画的时候没有传递初始值,那么还要提供getAbc的方法,因为系统要去去abc属性的初始值。(若此条不满足程序直接崩溃)
- 第二:object的setAbc对属性abc所做的改变必须能通过某种方法反映出来,比如会带来UI的改变之类的(如果不满足此条,动画无效果但不会奔溃)

以上7个问题,是目前我能想到的一些关于android动画的问题,都偏向于理论,并没有问具体动画的实现过程,日后有新的问题时,我会及时更新这篇文章的。

0 0