参考文章: 1、Android View移动的六种方法小结
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