Android动画:解决通过View.getY()获取初始位置为0的问题
2017-06-09 23:40
393 查看
问题描述
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就变成了一个偶现的问题(偶现的问题解决起来更麻烦)。相关文章推荐
- 通过android:descendantFocusability解决listview每一项或项中view无法获取焦点的问题
- Android: 解决动画完成后位置恢复到初始位置的问题
- Android: 解决动画完成后位置恢复到初始位置的问题
- android中通过辅助类解决findViewById需要对返回值强制类型转换的问题
- 完美解决 Android WebView 文本框获取焦点后自动放大问题
- android中通过添加view使用ViewPager出现的问题及解决方法
- Android:解决打开activity之后 屏幕初始位置不是顶部问题
- Android 通过Java代码动态获取控件位置的终极解决之道
- android获取view宽高的几种方法,解决获取高宽为0问题
- android TextView刷新时ImageView返回初始位置的问题
- android 获取网络数据,回传到本地用TextView显示乱码问题解决方法
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- Android之通过VideoView控件播放一个视频出现的问题以及我的解决办法
- Android移动view动画问题 关于view的位置移动了,但view里面绑定的监听器还在原位
- UITableView获取cell的row值(解决自定义cell里的button通过点击无法获得cell的indexpath的问题)
- Android中通过泛型解决findViewById需要强制类型转换的问题
- android 通过设置cookie解决app 登录后WebView还要重新登陆问题
- 通过View.post()获取View的宽高引发的两个问题:1post的Runnable何时被执行,2为何View需要layout两次;以及发现Android的一个小bug
- (转)完美解决 Android WebView 文本框获取焦点后自动放大有关问题