首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueAnimator vs ViewPropertyAnimator translationX的边距动画

ValueAnimator vs ViewPropertyAnimator translationX的边距动画
EN

Stack Overflow用户
提问于 2015-10-12 23:53:49
回答 2查看 843关注 0票数 1

我是一个机器人动画的初学者。我在RelativeLayout中有几个视图,我希望更改视图位置。我有哪些选项,它们之间有何不同?

我尝试了以下几种方法:

代码语言:javascript
复制
view.animate()
.translationX(toX)
.setDuration(duration);

代码语言:javascript
复制
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();
    }
});

两者都会更改视图的位置。有人能给我解释一下这两种方法的区别吗?我有哪些其他选项,哪些是首选选项。

EN

回答 2

Stack Overflow用户

发布于 2015-10-13 00:03:15

代码语言:javascript
复制
view.animate()
.translationX(toX)
.setDuration(duration);

我认为它是首选方法,因为它不会像第二个方法那样在每次更新时调用measure()和layout()。

一般情况下:

  • translationX旨在调节子对象在其父对象中的位置
  • 通过更改边距参数执行动画不是一个好主意(它应该只设置一次,并且很少更改,如果有更改的话)
票数 2
EN

Stack Overflow用户

发布于 2015-10-13 00:05:15

第一个是最好的解决方案。它是专门为动画创建的,所以它是最优化的版本。你必须记住,如果你动画一个视图,那么整个布局将随着每次移动而重新计算(显然是平移,但不是alpha ),所以你必须尽可能保持布局树的平坦。如果可能,尽量避免RelativeLayouts,因为每帧测量两次(https://youtu.be/HXQhu6qfTVU)。你可以在这里找到很多关于性能问题的很酷的视频:https://www.youtube.com/watch?v=ORgucLTtTDI&list=PLWz5rJ2EKKc9CBxr3BVjPTPoDPLdPIFCE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33085311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档