在編寫android的自定義控件,或者判斷用戶手勢操做時,每每須要使用MotionEvent中的getRawX()、getRawY()與getX()、getY()取得觸摸點在X軸與Y軸上的距離,這四個方法都返回一個float類型的參數,單位爲像素(Pixel)。getRawX()、getRawY()返回的是觸摸點相對於屏幕的位置,而getX()、getY()返回的則是觸摸點相對於View的位置。android
如下兩張圖直觀的表現了這幾個方法的區別,在屏幕中央放置了一個Button,併爲它註冊了OnTouchListener,圖中綠圓點爲觸摸點位置。spa
getScrollX()與getScrollY()的值由調用View的scrollTo(int x, int y)或者scrollBy(int x, int y)產生,其中scrollTo是將View中的內容移動到指定的座標x、y處,此x、y是相對於code
View的左上角,而不是屏幕的左上角。scrollBy(int x, int y)則是改變View中的相對位置,參數x、y爲距離上一次的相對位置。blog
文字解釋老是很差理解的,那麼咱們就直接上圖吧,直觀一些。get
(圖1) (圖2) (圖3)it
1.圖1中,屏幕中心放置了一個button,而button的內容被放置在了它的左上角。io
2.調用button的scrollTo(-100, -100)方法,結果如圖2所示,button內的內容被移至相對button左上角(-100,-100)的位置class
3.對圖2的button調用scrollBy(-100,-100)方法,結果如圖3所示,button內的內容被移至相對於圖2的(-100,-100)位置test
這時的getScrollX()與getScrollY()的值爲:List
06-15 15:44:56.072 20471-20471/com.test.yangy.studiotest V/ScrollActivity﹕ btn scroll X=-200 06-15 15:44:56.072 20471-20471/com.test.yangy.studiotest V/ScrollActivity﹕ btn scroll Y=-200
值得注意的是,當View中的內容向右移動時,getScrollX()的值爲負數,同理,向scrollTo與scrollBy的x中傳入負數,view中的內容向右移動,反之向左。
當View中的內容向下移動時,getScrollY()的值爲負數,同理,向scrollTo與scrollBy的y中傳入負數,view中的內容向下移動,反之向上。