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