前言由于最近在写一个涉及移动方面的自定义View,在做移动的时候用到了类似offsetTopAndBottom 、setTranslationY、scrollTo、scrollBy等方法,对于他们的使用,有一些不太清晰的地方。比如,view的getX/Y、getSrollX/Y、getTranslationX/Y、getLeft/top/right/bottom、点击事件触发区域等等 是否会受到影响改变,由哪些所影响。 因为View的属性有点多,所以,很多时候你不知道哪些属性受哪些方法影响,并且多种方法联合使用的时候,效果又是如何,影响又是如何。 正题于是我就开始测试,实践来检验结果。 目前为止大致有这几种方法可以移动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和其他移动方法,
总结好了,差多就这些了,其他更多复杂的组合使用,只要你能逐一弄清楚他们各自起作用的属性和对象,你就能大致摸索出来。 |
|
来自: mediatv > 《Android界面设计文档》