View是Android中全部控件的基類,無論是簡單的Button和TextView,仍是複雜的RelativeLayout和ListView,其基類都是View類;ViewGroup也繼承了View類,這意味着View自己就能夠表明簡單的和複雜的全部控件和佈局,經過這種關係,就造成了View樹的結構。數組
在操做View的時候,尤爲是在處理自定義View的一些事件的時候,咱們每每須要獲取到目標View的這樣或那樣的參數。下面就來簡單介紹一下View的各類參數及其用法。佈局
View有這樣的一些屬性:x、y、z、left、right、top、bottom、elevation、translationX、translationY、translationZ、rawX、rawY等等,下面一一介紹這些參數的意義及如何獲取這些參數。動畫
這裏須要注意一點:如下方法,若是直接在Activity的onCreate()方法中調用,則可能會返回0,這是由於在程序剛剛啓動,剛剛開始繪製這個View的時候,咱們就要獲取這個View的各個位置參數,固然會返回0。解決方法是:在Activity的 onWindowFocusChanged() 方法中獲取;或者能夠新建一個線程,先 Thread.sleep() 一段時間以後,再獲取這些參數。spa
這五個參數表明的是View的原始位置相對於其父控件邊緣的距離:線程
left、right、top和bottom四個屬性的關係以下圖所示:code
注意:View的這五個屬性值表明的是View的原始位置座標值,不管這個View被移動到了什麼位置,或者被縮放、旋轉了多少,這五個值都是永久不變的。blog
這三個參數表明的是在動畫或者滑動View的時候,View的當前位置相對於其原始位置平移的距離:繼承
這三個參數表明的是View的當前位置相對於其父控件的距離:事件
這三個參數和前面的幾個參數的關係公式以下:get
MotionEvent是咱們用來操做View的觸摸事件的類,當咱們對屏幕進行一次操做的時候,就會觸發MotionEvent中的幾個觸摸事件:
所以,對於咱們經常作的一些操做,相應的事件觸發順序以下:
使用MotionEvent類,咱們還能夠獲取到觸摸屏幕時View的一些位置參數:
這裏說的View相對屏幕的距離,是指View的左上角相對於手機屏幕左上角的座標。能夠使用如下幾個方法獲取:
這個方法的用法代碼以下:
int[] position = new int[2]; view.getLocationInWindow(position); System.out.println("(" + position[0] + "," + position[1] + ")");
若是當前Activity是普通的Activity,則用這個方法獲得的position數組中的第二個參數(Y座標值)表示可見的狀態欄的高度 + 可見的標題欄的高度 + View上端到標題欄下端的距離;
若是當前Activity是對話框式的Activity,則Y座標值表示可見的標題欄的高度 + View上端到標題欄下端的距離。
注意:這裏的「可見」表示的是能看到的,若是一個Activity中的狀態欄或標題欄被隱藏了,則其高度用0表示。
這個方法的用法代碼以下:
int[] position = new int[2]; view.getLocationOnScreen(position); System.out.println("(" + position[0] + "," + position[1] + ")");
這個方法對Y座標的要求和上面的方法相同。
這個方法的用法代碼以下:
Rect rect = new Rect(); view.getGlobalVisibleRect(rect); System.out.println("(" + rect.left + "," + rect.top + ")");
Rect在這裏的做用是「套住」這個View,其對Y座標的要求和上面的方法相同。