【问题标题】:What is the difference between an Animator and an Animation?动画师和动画有什么区别?
【发布时间】:2015-03-29 00:38:54
【问题描述】:

看起来AnimationsAnimators 都允许我为对象的属性(位置、不透明度、比例、旋转等)设置动画,但我很难区分两者的用例。我什么时候应该使用动画师而不是动画,反之亦然?

【问题讨论】:

    标签: android android-animation


    【解决方案1】:

    AnimationsAnimators 的旧版本。动画师在 3.0 中引入,以帮助克服动画的一些缺点。

    Animations 仅更改对象的视觉表示。如果您只是更改不透明度,这很好,但在您平移、旋转或缩放对象时会导致问题。在Animators 之前的旧日子里,如果您翻译了对象,则必须使用新坐标执行重新布局。根据对象移动的位置,这可能会相当困难。

    另一方面,动画师会改变对象的物理属性。这意味着如果您将 View 移动到新位置,触摸坐标将映射到新位置,而无需任何其他干预。

    就个人而言,除非我在 API 2.3 或更低版本上进行开发,否则我不再使用动画。值得庆幸的是,这已不再是一个问题。还有一些旧的类仍然使用动画 API,尤其是在使用 xml 资源时,例如 android.support.v4.app.FragmentTransaction 类(普通的 FragmentTransaction 支持动画器)。

    顺便说一句,NineOldAndroids 项目是为了模仿 Animator 的功能而开发的,但使用了动画,因此您可以制作可以一直运行到 1.6 的应用程序。

    【讨论】:

    • 好答案。此外,如果您希望使用动画更改布局,则可能但在性能方面可能效果不佳,具体取决于您使用的布局。我在这里做了一个示例:stackoverflow.com/a/19616416/878126
    【解决方案2】:

    Animation 对象为视图的图像设置动画。例如,如果您使用它来在屏幕上移动一个按钮,您将无法在新的可见位置单击它,因为它并没有真正移动,而只是他的位图表示被翻译了。您也无法更改它的比例,因为您正在修改位图。如果使用 xml 文件,请将它们放在 anim 文件夹中。

    Animator 对象为视图的属性(如边距或宽度)设置动画。如果您使用它在屏幕上移动一个按钮,您能够在新的可见位置捕获对它的点击。如果使用 xml 文件,请将它们放在 animator 文件夹中。

    如果您只需要修饰效果,例如淡入或小外观翻译,使用Animation 会更有效,因为它不会调用layout()measure() 方法。如果您确实需要捕获点击事件等操作,请使用Animator

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      相关资源
      最近更新 更多