View位置总结

为什么80%的码农都做不了架构师?>>>   hot3.png

参考文章: 1、Android View移动的六种方法小结

2、Android应用坐标系统全面详解

3、Android动画精讲一:从setTranslationX谈属性动画和view动画的区别

总结:

1、LayoutParams
通过view的LayoutParams设置margin最终影响了view的位置,这个同时会改变view的getLeft/getRight
等变量。注意,使用view动画+updateLayoutParams策略时,务必注意不要使用transAnim.setFillAfter(true),因为在view动画+updateLayoutParams+transAnim.setFillAfter(true)这种策略下,view最终的绘制位置等于将view先updateLayoutParams后在新的位置基础上,再进行动画移位。。

2、setTranslationX
 setTranslationX改变了view的位置,但没有改变view的LayoutParams里的margin属性,也没 有改变view的getLeft/getRight; 它改变的是android:translationX 属性,也即这个参数级别是 和margin平行的。

3、View.layout(int l, int t, int r, int b)
该方法只有ViewGroup类继承过,其他类都没有继承。该方法会调用View.onLayout方法,onLayout一般是ViewGroup的子类去实现,子类实现中会调用每个child.layout方法进行布局,也就是说最终布局都是在View.layout方法中,ViewGroup的子类中也就是获取child的各种参数,计算好再传回child自己。

4、View.offsetLeftAndRight()和View.offsetTopAndBottom()
移动的是整个View,getLeft()或者getTop会变的,自定义View很有用,但是不会改变LayoutParams.xxxMargin。LayoutParams.xxxMargin在父布局onLayout中调用的,得到child的left,top,right,bottom等值,然后调用child.layout方法。

5、scrollTo() scrollBy()

6、Scroller

转载于:https://my.oschina.net/bruces/blog/708870

你可能感兴趣的:(View位置总结)