android自定義View——座標系

韓明澤發表於2019-02-08

在開發過程中有的時候我們會實現一些特殊功能,如元件滑動到一定距離隱藏或顯示、圖片置頂等等,這個時候view的座標就派上了用場了;同樣在自定義控制元件的時候,座標系也是經常用到的,下面記錄一下在複習過程中view座標系的一些知識。

目錄

  • view的四個頂點座標
  • view的x、y、translationX、translationY座標
  • MotionEvent獲取座標

圖1

1. view的四個頂點座標

view的位置主要由四個頂點座標來決定,並且這個四個座標都是相當座標,view在移動過程中,它們的值不會發生變化。

注:圖1灰色部分為view相對於其父容器的四個頂點座標

四個頂點座標分別為:

getTop();       //獲取子View左上角距父View頂部的距離
getLeft();      //獲取子View左上角距父View左側的距離
getBottom();    //獲取子View右下角距父View頂部的距離
getRight();     //獲取子View右下角距父View左側的距離
複製程式碼

view的寬高計算:

//寬=right-left
int width = getRight() - getLeft();
//框架自帶
int width2 = getWidth();

//高=bottom-top
int height = getBottom() - getTop();
int height2 = getHeight();
複製程式碼

2. view的x、y、translationX、translationY座標

圖2

android3.0之後為view增加了x、y、translationX、translationY坐引數(上面圖2)。其中x、y為view左上角的座標,translationX、translationY是view左上角相對於父容器的偏移量,它們預設值為0。

//x、y的計算
float x = getLeft() + getTranslationX();
float x2 = getX();
float y = getTop() + getTranslationY();
float y2 = getY();
複製程式碼

3. MotionEvent獲取座標

MotionEvent主要用於處理使用者觸控螢幕後的互動。其獲取的座標資訊如下:

注:圖1紅色部分為MotionEvent獲取的座標資訊

//觸控點相對於其所在元件的相對座標
event.getX();      
event.getY();
//觸控點相對於屏的絕對座標
event.getRawX();    
event.getRawY();
複製程式碼

相關文章