AndroidAndroid开发Android技术知识

android view的多种移动方式(测试集合)

2016-12-16  本文已影响3140人  Jafir

前言

由于最近在写一个涉及移动方面的自定义View,在做移动的时候用到了类似offsetTopAndBottom 、setTranslationY、scrollTo、scrollBy等方法,对于他们的使用,有一些不太清晰的地方。比如,view的getX/Y、getSrollX/Y、getTranslationX/Y、getLeft/top/right/bottom、点击事件触发区域等等 是否会受到影响改变,由哪些所影响。

因为View的属性有点多,所以,很多时候你不知道哪些属性受哪些方法影响,并且多种方法联合使用的时候,效果又是如何,影响又是如何。

正题

于是我就开始测试,实践来检验结果。

目前为止大致有这几种方法可以移动view:
**1、setTranslationX/Y
2、scrollTo/scrollBy
3、offsetTopAndBottom/offsetLeftAndRight
4、平移动画
5、设置margin
**

主要是验证一些属性:
1、getX()、getY()
2、getScrollX() 、getScrollY()
3、getTranslationX() 、getTranslationY()
4、getLeft()、 getTop()、 getRight()、 getBottom()(坐标位置是否改变)
5、点击事件触发区域是否改变
6、是否会影响同层级的其他view的位置
7、超过父View是否绘制

现在主要把他们用一张表列出来:

稍微整理一下他们各自特点:
setTranslationX/Y
scrollTo/scrollBy
offsetTopAndBottom/offsetLeftAndRight
平移动画
设置margin

下面是验证过程:(前方高能,多图预警!!!!!最重要的东西都罗列在前面了,没时间不用往下看了)

默认情况log
setTranslationXY:
指定了父布局 不能超过父布局,会显示不出来 会超过边界到同层view的区域去(被覆盖或者覆盖别人)
scrollBy:
offsetTopAndBottom offsetLeftAndRight:
动画+setFillAfter(true):
margin:

组合


比如先多点几次 offset ,然后再margin会立马回到(原位置+margin)后的状态

说明:margin的平移效果是以view在父View中的位置和margin值决定的,是父View通过计算margin值之后,重新给你排的位置,实现的移动。当我们设置margin之后,会触发requestLayout,所以父VIew又重新给它排了位置。


如果,我先offset几次,然后再点击动画,动画会在原来的基础上,继续平移。

说明:动画不是根据位置来移动的,可能是根据一个metrix的矩阵变换来实现平移的(请指正)

如果,先scrollBy,然后再动画、offset和其他移动方法,


说明:其他的平移方法,都是对于view本身在做移动,而不像scrollBy只是对其内容进行平移

总结

好了,差多就这些了,其他更多复杂的组合使用,只要你能逐一弄清楚他们各自起作用的属性和对象,你就能大致摸索出来。
剩下的大家可以去demo看看,然后自己试一试。

上一篇下一篇

猜你喜欢

热点阅读