ObjectAnimator vs TranslateAnimation

时间:2015-03-20 20:37:43

标签: java android android-animation

我只是做一个简单的项目,我尝试使用TranslateAnimation显示/隐藏LinearLayout顶部的布局。有一个闪烁,因为当我调用onAnimationEnd()时,动画没有完成0.1秒。

示例:

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

当我在stackoverflow上搜索时,我发现还有另一种方法可以做到。使用ObjectAnimator。使用它之后,我的动画很好,没有View.GONE

TranslateAnimation和ObjectAnimator有什么区别?其中一个是否被弃用,他们做同样的事情,或者有一个或另一个更好的时候。

这是一个包含2个版本(https://github.com/charlesvigneault/AAA_Test1

的github仓库

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

TranslateAnimation被删除,因为android 3.0和ObjectAnimator是要走的路。对象动画师更灵活,因为它允许你动画"任何具有适当的setter和getter的对象属性。检查官方android开发指南 http://developer.android.com/guide/topics/graphics/overview.html