ObjectAnimator和TranslateAnimation的区别

6

我刚做了一个简单的项目,试图使用TranslateAnimation来显示/隐藏LinearLayout顶部的布局。由于当我调用onAnimationEnd()时,动画还没有完成0.1秒,所以会出现闪烁。

例如:

            @Override
            public void onAnimationEnd(Animation animation) {
                retractableLayout.setVisibility(View.GONE);
            }

当我在stackoverflow上搜索时,我发现了另一种方法。使用ObjectAnimator。使用它后,我的动画没有View.GONE也很好。
TranslateAnimation和ObjectAnimator有什么区别?它们中的一个是否已过时并且它们做相同的事情或者在某些情况下其中之一更好。
这是一个带有2个版本的github存储库(https://github.com/charlesvigneault/AAA_Test1
谢谢
2个回答

15

主要区别在于,如果您使用TranslateAnimation进行动画操作,则被动画操作的视图不会真正离开其屏幕上的原始位置,它只是看起来像移动了。因此,该视图基本上不会改变其坐标。

请查看有关视图动画的视频:https://www.youtube.com/watch?v=_UWXqFBF86U

如果您使用ObjectAnimator,则视图确实更改其实际位置。

TranslateAnimation并未过时,您仍然可以在Lollipop上找到它,但对于大多数情况,我建议使用一个名为ViewPropertyAnimator的类。很多人似乎还不知道这个,它可能是最简单和最直接的动画视图方式,也可以节省很多代码。以下是一个示例:

retractableLayout.animate()
                .translationX(toX)
                .translationY(toY)
                .setDuration(duration)
                .setInterpolator(interpolator)
                .setStartDelay(startDelay);

你也可以设置监听器等,请确保检查可用方法。

并查看这个非常有帮助的视频:

https://www.youtube.com/watch?v=3UbJhmkeSig


ViewPropertyAnimator很棒!从来不知道它存在,谢谢。 - Iain Smith

0

我们在 OnePlus One (5.0.1) 上使用 ObjectAnimator 时遇到了一个小问题:使用 TRANSLATION_X 动画将视图从右侧滑入屏幕时,ObectAnimator.ofFloat(view, View.TRANSLATION_X, view.getRootView().getWidth(), 0) 似乎会忽略 view 布局的阶段,但 <translate android:fromXDelta="100%" android:toXDelta="0%"/> 则能够完美运行。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接