Android动画:解决通过View.getY()获取初始位置为0的问题

来源:互联网 发布:mac电脑怎么截长图 编辑:程序博客网 时间:2024/06/06 19:16

问题描述

View.getY()返回为0

问题背景

用ObjectAnimator进行平移动画的时候需要获取控件的初始位置以及结束位置,比如

ObjectAnimator animY = ObjectAnimator.ofFloat(rankRibbon, "Y", rankRibbon.getY(), rankRibbon.getY() + 30);

是将rankRibbon向下移动30px
也可以通过translationY设置控件的初始位置和平移相对距离

ObjectAnimator animY = ObjectAnimator.ofFloat(rankSlogan, "translationY", rankSlogan.getY(), -30);

是将rankSlogan向上移动30px
在这2个例子中都用到了getY(),通过getY返回该控件相对父控件的距离。
如果getY()返回是0就会出现动画异常。

解决方式

如果一个View初始化的时候设置的是View.Gone,那么该view在getY的时候获取的就是0,所以可以在xml里将View设置为invisiable,这样就不影响正常的获取view的位置。
在动画中经常需要获取View的位置,设置View的偏移,所以这个问题稍不注意就经常发生。

另一个问题

能够通过在获取getY之前setVisibility(View.VISIABLE)解决?

不能。这样设置之后好像是起到了将View显示的效果,但如果View并没有完全显示出来,马上获取getY有时也会是0,这样getY就变成了一个偶现的问题(偶现的问题解决起来更麻烦)。

阅读全文
0 0
原创粉丝点击