android之View坐標系,獲取坐標值,改變控件的位置


getLocationOnScreen 計算該視圖在全局坐標系中的x,y值,(注意這個值是要從屏幕頂端算起,也就是包括了通知欄的高度)//獲取在當前屏幕內的絕對坐標 
getLocationInWindow 計算該視圖在它所在的widnow的坐標x,y值,//獲取在整個窗口內的絕對坐標

getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父親里的坐標
int[] location = new  int[2] ;
view.getLocationInWindow(location); //獲取在當前窗口內的絕對坐標,當前activity顯示的大小
view.getLocationOnScreen(location);//獲取在整個屏幕內的絕對坐標,包括通知欄
location [0]--->x坐標,location [1]--->y坐標   

getLocationInWindow的使用見:  PopupWindow彈出窗口的使用

其實只要把下面這張圖看明白就沒問題了。

涉及到的方法一共有下面幾個:

view獲取自身坐標:getLeft(),getTop(),getRight(),getBottom()    相對於父控件的距離   需要注意的是這四個方法獲取的坐標表示的是 View 原始狀態時相對於父容器的坐標,對 View 進行平移操作並不會改變着四個方法的返回值。

所以在使用ScrollView滑動到指定View的位置時,就可以這樣做:

scrollView.smoothScrollTo(0, tagView.getTop());

//補充兩個方法
//scrollView.fullScroll(ScrollView.FOCUS_DOWN);//滾到到底部
//scrollView.fullScroll(ScrollView.FOCUS_UP);//滾到到頂部

view獲取自身寬高:getHeight(),getWidth()         高度=bottom-top      寬度=right - getLeft()

motionEvent獲取坐標:getX(),getY(),   相對於父控件的坐標         getRawX(),getRawY() 相對於屏幕的坐標

首先是view的幾個方法:

獲取自身的寬高的這兩個方法很清楚,不用多說,獲取坐標的這幾個就有點混亂了。

根據上面的圖應該會比較容易明白,圖中屏幕上放了一個ViewGroup布局,里面有個View控件

getTop:獲取到的,是view自身的頂邊到其父布局頂邊的距離

getLeft:獲取到的,是view自身的左邊到其父布局左邊的距離

getRight:獲取到的,是view自身的右邊到其父布局左邊的距離

getBottom:獲取到的,是view自身的底邊到其父布局頂邊的距離

 

然后是motionEvent的方法:

getX():獲取點擊事件相對控件左邊的x軸坐標,即點擊事件距離控件左邊的距離

getY():獲取點擊事件相對控件頂邊的y軸坐標,即點擊事件距離控件頂邊的距離

getRawX():獲取點擊事件相對整個屏幕左邊的x軸坐標,即點擊事件距離整個屏幕左邊的距離

getRawY():獲取點擊事件相對整個屏幕頂邊的y軸坐標,即點擊事件距離整個屏幕頂邊的距離

int newX =(int) event.getRawX();
int newY =(int) event.getRawY();
int dx = newX - startX;
int dy = newY - startY;
//窗體可以這樣改變坐標位置:wm.updateViewLayout(); 圖片可以改變layout
imageView.layout(iv.getLeft()+dx, iv.getTop()+dy, iv.getRight()+dx, iv.getBottom()+dy);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM