Android面试题(四)——动画

引言

Android动画可以帮助我们实现一些炫酷的效果,掌握动画主要在于练习。在面试中更多地根据实际需求回答。

面试题

  1. 下面哪一项不属于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

  2. 下面属于android的动画分类的有?(android3.0之前)
    A Tween
    B Frame
    C Draw
    D Animation
    正确答案:AB
    解析:两种,一种是Tween 动画、还有一种是 Frame 动画。 Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。属性动画是android3.0之后才有的。

  3. 动画占用大量内存,如何优化?

    • OOM问题:这个问题主要出现在帧动画中,当图片数量较多且图片较大时就极易出现OOM,这个在实际开发中要尤其注意,尽量避免使用帧动画。
    • 内存泄露:在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄露,通过验证后发现View动画并不存在此问题。
  4. 使用动画的注意事项

    1. OOM问题:这个问题主要出现在帧动画中,当图片数量较多且图片较大时就极易出现OOM,这个在实际开发中要尤其注意,尽量避免使用帧动画。
    2. 内存泄露:在属性动画中有一类无限循环的动画,这类动画需要在Activity退出时及时停止,否则将导致Activity无法释放从而造成内存泄露,通过验证后发现View动画并不存在此问题。
    3. 兼容性问题:动画在3.0以下的系统有兼容性问题,在某些特殊场景可能无法正常工作,因此要做好适配工作。
    4. View动画的问题:View动画是对View的影像做动画,并不是真正改变View的状态,因此有时候会出现动画完成后View无法隐藏的现象,即setVisibility(View.GOEN)失效了,这个时候只要调用view.clearAnimation()清除View动画即可解决问题。
    5. 不要使用px:在进行动画的过程中,要尽量使用dp,使用px会导致在不用的设备上有不用的效果。
    6. 动画元素的交互:从3.0开始,将view移动(平移)后,属性动画的单击事件触发位置为移动后的位置,但是View动画仍然在原位置。在Android3.0以前的系统中,不管是View动画还是属性动画,新位置都无法触发单击事件同时,老位置仍然能触发单击事件(因为属性动画在Android3.0以前是没有的,是通过兼容包实现的,底层也是调用View动画)。
    7. 硬件加速:使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。
      开启方法:
      在你的Android manifest文件,添加hardwareAccelerated属性就可以了。可以给整个application设置,也可以单独给一个acitivty设置,该属性默认值为false;
      1
      2
      3
      4
      5
      <application android:hardwareAccelerated="true">    
      <activity ... />   
      <activity android:hardwareAccelerated="true" />
      <activity android:hardwareAccelerated="false" />
      </application>

推荐

我的个人博客

热评文章