我是一个机器人动画的初学者。我在RelativeLayout中有几个视图,我希望更改视图位置。我有哪些选项,它们之间有何不同?
我尝试了以下几种方法:
view.animate()
.translationX(toX)
.setDuration(duration);和
RelativeLayout.MarginLayoutParams params = (RelativeLayout.MarginLayoutParams) view.getLayoutParams();
ValueAnimator animator = ValueAnimator.ofInt(params.rightMargin, 100);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
params5.rightMargin = (Integer) valueAnimator.getAnimatedValue();
}
});两者都会更改视图的位置。有人能给我解释一下这两种方法的区别吗?我有哪些其他选项,哪些是首选选项。
发布于 2015-10-13 00:03:15
view.animate()
.translationX(toX)
.setDuration(duration);我认为它是首选方法,因为它不会像第二个方法那样在每次更新时调用measure()和layout()。
一般情况下:
发布于 2015-10-13 00:05:15
第一个是最好的解决方案。它是专门为动画创建的,所以它是最优化的版本。你必须记住,如果你动画一个视图,那么整个布局将随着每次移动而重新计算(显然是平移,但不是alpha ),所以你必须尽可能保持布局树的平坦。如果可能,尽量避免RelativeLayouts,因为每帧测量两次(https://youtu.be/HXQhu6qfTVU)。你可以在这里找到很多关于性能问题的很酷的视频:https://www.youtube.com/watch?v=ORgucLTtTDI&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE
https://stackoverflow.com/questions/33085311
复制相似问题