【发布时间】:2015-03-29 00:38:54
【问题描述】:
看起来Animations 和Animators 都允许我为对象的属性(位置、不透明度、比例、旋转等)设置动画,但我很难区分两者的用例。我什么时候应该使用动画师而不是动画,反之亦然?
【问题讨论】:
看起来Animations 和Animators 都允许我为对象的属性(位置、不透明度、比例、旋转等)设置动画,但我很难区分两者的用例。我什么时候应该使用动画师而不是动画,反之亦然?
【问题讨论】:
Animations 是 Animators 的旧版本。动画师在 3.0 中引入,以帮助克服动画的一些缺点。
Animations 仅更改对象的视觉表示。如果您只是更改不透明度,这很好,但在您平移、旋转或缩放对象时会导致问题。在Animators 之前的旧日子里,如果您翻译了对象,则必须使用新坐标执行重新布局。根据对象移动的位置,这可能会相当困难。
另一方面,动画师会改变对象的物理属性。这意味着如果您将 View 移动到新位置,触摸坐标将映射到新位置,而无需任何其他干预。
就个人而言,除非我在 API 2.3 或更低版本上进行开发,否则我不再使用动画。值得庆幸的是,这已不再是一个问题。还有一些旧的类仍然使用动画 API,尤其是在使用 xml 资源时,例如 android.support.v4.app.FragmentTransaction 类(普通的 FragmentTransaction 支持动画器)。
顺便说一句,NineOldAndroids 项目是为了模仿 Animator 的功能而开发的,但使用了动画,因此您可以制作可以一直运行到 1.6 的应用程序。
【讨论】:
Animation 对象为视图的图像设置动画。例如,如果您使用它来在屏幕上移动一个按钮,您将无法在新的可见位置单击它,因为它并没有真正移动,而只是他的位图表示被翻译了。您也无法更改它的比例,因为您正在修改位图。如果使用 xml 文件,请将它们放在 anim 文件夹中。
Animator 对象为视图的属性(如边距或宽度)设置动画。如果您使用它在屏幕上移动一个按钮,您将能够在新的可见位置捕获对它的点击。如果使用 xml 文件,请将它们放在 animator 文件夹中。
如果您只需要修饰效果,例如淡入或小外观翻译,使用Animation 会更有效,因为它不会调用layout() 或measure() 方法。如果您确实需要捕获点击事件等操作,请使用Animator。
【讨论】: