我只是做了一个简单的项目,在这个项目中,我尝试用TranslateAnimation显示/隐藏一个布局在TranslateAnimation的顶部。有一个闪烁,因为当我调用onAnimationEnd()时,动画在0.1秒内没有完成。
示例:
@Override
public void onAnimationEnd(Animation animation) {
retractableLayout.setVisibility(View.GONE);
}当我搜索堆栈溢出时,我发现了另一种方法。用ObjectAnimator。使用它之后,没有View.GONE,我的动画就没问题了。
TranslateAnimation和ObjectAnimator有什么区别?他们中的一个被反对,他们做同样的事情,或者有一段时间,其中一个更好。
这里有一个带有两个版本的github回购(Test1)
谢谢
发布于 2015-03-21 19:49:26
区别主要在于,如果您使用TranslateAnimation,您正在动画的视图并没有真正保留它在屏幕上的原始位置,它只是使它看起来像是在移动。所以视图基本上不会改变它的坐标。
查看这段关于观看动画的视频:UWXqFBF86U
如果使用ObjectAnimator,视图实际上会更改其实际位置。
TranslateAnimation并不是不推荐的,您仍然可以在Lollipop上找到它,但在大多数情况下,我可以推荐一个名为ViewPropertyAnimator的类,许多人似乎还不知道这个类,它可能是最简单和最直接的方式来动画一个视图,也可以为您节省大量代码。以下是一个例子:
retractableLayout.animate()
.translationX(toX)
.translationY(toY)
.setDuration(duration)
.setInterpolator(interpolator)
.setStartDelay(startDelay);您还可以设置监听器等,确保检查可用的方法。
看看这段非常有用的视频:
发布于 2015-03-20 20:41:31
从Android3.0开始,TranslateAnimation就被取消了,而ObjectAnimator就是其中的一条路。对象动画更加灵活,因为它允许您“动画”任何有适当设置器和getter实现的对象属性。查看官方android开发指南http://developer.android.com/guide/topics/graphics/overview.html
https://stackoverflow.com/questions/29175429
复制相似问题