1.getRawX、getRawY與getX、getY的區別
在編寫android的自定義控件,或者判斷用戶手勢操作時,往往需要使用MotionEvent中的getRawX()、getRawY()與getX()、getY()取得觸摸點在X軸與Y軸上的距離,這四個方法都返回一個float類型的參數,單位為像素(Pixel)。getRawX()、getRawY()返回的是觸摸點相對於屏幕的位置,而getX()、getY()返回的則是觸摸點相對於View的位置。
以下兩張圖直觀的表現了這幾個方法的區別,在屏幕中央放置了一個Button,並為它注冊了OnTouchListener,圖中綠圓點為觸摸點位置。
2.View中的getScrollX、getScrollY
getScrollX()與getScrollY()的值由調用View的scrollTo(int x, int y)或者scrollBy(int x, int y)產生,其中scrollTo是將View中的內容移動到指定的坐標x、y處,此x、y是相對於
View的左上角,而不是屏幕的左上角。scrollBy(int x, int y)則是改變View中的相對位置,參數x、y為距離上一次的相對位置。
文字解釋總是不好理解的,那么我們就直接上圖吧,直觀一些。
(圖1) (圖2) (圖3)
1.圖1中,屏幕中心放置了一個button,而button的內容被放置在了它的左上角。
2.調用button的scrollTo(-100, -100)方法,結果如圖2所示,button內的內容被移至相對button左上角(-100,-100)的位置
3.對圖2的button調用scrollBy(-100,-100)方法,結果如圖3所示,button內的內容被移至相對於圖2的(-100,-100)位置
這時的getScrollX()與getScrollY()的值為:
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中的內容向下移動,反之向上。