本文主要是比較getX,event.getRawX,getScrollX,event.get幾種獲取坐標方法的區(qū)別。
灰色框:整個屏幕,包含狀態(tài)欄,標題欄,內(nèi)容區(qū)域
黑色框:控件
綠色框:控件里面的內(nèi)容
紅色點:點擊的位置
黑色框和綠色框是什么意思呢?
解釋一下,如果黑色框代表ViewGroup,那綠色框就是子控件。如果黑色框代表View(Button或ImageView等),那么綠色框就可能是文字或是圖片或其他內(nèi)容。
假設黑色框是ViewGroup,綠色框是子控件。
測試三種情況下的坐標:
圖1.不移動子控件
圖2.然后移動子控件
圖3.修改ViewGroup在其父容器的位置,不移動子控件
需要注意的是這些坐標都是基于ViewGroup獲得的
getY()/getX() :圖1、2,在ViewGroup在其父容器的位置沒有移動時,Y/X都為零,在圖3中ViewGroup分別向x/y軸移動50距離后,Y/X坐標變成50,而且點擊ViewGroup任意位置Y/X坐標都為50。
event.getY()/event.getX():結(jié)合3個圖,可以看到event.getY()/event.getX()不受子控件影響,得到的坐標都是基于ViewGroup的。
getScrollY()/getScrollX():圖1、3中子控件相對于viewGroup不移動,所以坐標不變化。圖2中子控件相對于ViewGroup分別向想x/y軸移動,所以坐標發(fā)生變化,這里要注意的是得到坐標都是相反的,這里可以理解成 ViewGroup 相對于 子控件坐標原點(左上角)移動了多少。
event.getRawY()/enent.getRawX():這個最好理解了,它不受任何影響,得到的就是相對于屏幕坐標原點(左上角)的坐標
小結(jié)
**getY()/getX() **:當前操作的控件相對其父控件移動的距離
event.getY()/event.getX():觸摸的位置在當前操作控件的位置
getScrollY()/getScrollX():當前操作控件的內(nèi)容移動的距離
event.getRawY()/enent.getRawX():相對于屏幕坐標原點(左上角)的坐標