1. View的位置参数
首先View的位置由四个参数决定:left、top、right、bttom,当然这些位置是相对其父容器而言的。从图中我们可以明显的看出View宽高和坐标的关系:
width = right - left;
height = bottom - top;
从Android3.0之后,还需要注意这几个参数:x、y、translationX、translationY,其中x,y是View的左上角坐标,translationX和translationY是View左上角相对父容器的偏移量。这些参数也都是相对父容器而言的。这几个参数的换算关系:
x = left + translationX;
y = top + translationY;
注:left,top是原始左上角的位置信息(View平移的过程中,其值并不改变)
以上所介绍的八个属性都能通过其对应的getter方法获得。
2. View的滑动
通常,View的滑动可以通过三种方式来改变:
- View本身的提供的scrollTo/scrollBy方式实现滑动(只改变View内容的位置而不改变布局中的位置)
- 通过动画施加平移效果来实现滑动
- 通过改变View的LayoutParams使得View重新布局实现滑动
滑动过程中,View的两个属性mScrollX, mScrollY的改变规则:
mScrollX的值总等于View左边缘和View内容左边缘在水平方向的距离,
而mScrollY的值总等于View上边缘和View内容上边缘在竖直方向的距离。
mScrollX, mScrollY单位为像素,并且
当View左边缘在View内容左边缘的右边时,mScrollX为正值,反正则为负值;
当View上边缘在View内容上边缘的下边时,mScrollY为正值,反之为负值。
即
从右往左滑动,mScrollX为正值,反之为负值;
从下往上滑动,mScrollY为正值,反之为负值。
动画的方式可以使用View动画或属性动画(3.0之后),操作View的translationX和translationY属性。详细请见Android动画体系
改变布局参数这种方式,举个例子
MarginLayoutParams params = (MarginLayoutParams) button.getLayoutParams();
params.width += 100;
params.leftMargin += 100;// 向右平移100px
button.requestLayout();// 重新布局
// 或者 button.setLayoutParams(params);// 内部也会调用requestLayout();重新布局
另外,介绍一种改变View边界的方式,就是offsetTopAndBottom,改变的是top, bottom, 即上下平移View的位置;offsetLeftAndRight,改变的是left, right, 即左右平移View的位置。
总结:
- scrollTo/scrollBy:操作简单,适用于View内容的滑动;
- 动画:操作简单,适用于没有交互的View和实现复杂动画效果;
- 改变布局参数:操作相对复杂,适用于需要交互的View。