view的位置參數
view的位置主要由它的四個頂點來決定的,分別對應view的四個屬性:top、left、right、bottom,在layout(int left,int top,int right,bottom)時,設置這四個屬性的值
1、view提供一些方法獲取自身屬性的值
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
- left = getLeft() = layoutParams.leftMargin + 父佈局的PaddingLeft
- top= getTop() = layoutParams.topMargin + 父佈局的PaddingTop
- right = getRight() = layoutParams.rightMargin + 父佈局的PaddingRight
- bottom= getBottom() = layoutParams.bottomMargin + 父佈局的PaddingBottom
從android3.0開始,View增加了額外的幾個參數: x、y、translationX 和 translationY,其中x和y是View的左上角的座標,而translationX和translationY是view左上角相對與父容器的偏移量。這幾個參數也是相對於父容器的座標,這幾個的參數的換算關係如下
- x = left + translationX;
- y= top + translationY;
需要注意的是View在動畫平移的過程中,top 和 left 表示的是原始左上角的位置信息,其值並不會發生改變,此時發生改變的是x、y、translationX和translationY這四個參數
這裏引用一篇博客對x、y、translationX和translationY的詳解
http://blog.csdn.net/wxv111/article/details/50901199
1.2 layout()方法詳解
當調用layout(int left,int top,int right,int bottom)方法改變View的位置時,改變的只是view的mLeft,mTop,mRight,mBottom的值,當父佈局刷新時,會重新計算子View的mLeft,mTop,mRight,mBottom的值,這就會導致view重新回到原來的位置。所以在改變view的位置時最好改變其Margin的值,以防止父佈局刷新時view回到原來的位置。
2、MotionEvent提供的方法
- getX(): 獲取點擊事件距離控件左邊的距離
- getY(): 獲取點擊事件距離控件頂邊的距離
- getRawX(): 獲取點擊事件距離整個屏幕左邊的距離
- getRawY(): 獲取點擊事件距離整個屏幕頂邊的距離