在做1個view背景殊效的時候被坐標的各個獲得方法弄暈了,幾篇抄來抄去的博客也沒弄很清楚。
現在把全部總結1下。
其實只要把下面這張圖看明白就沒問題了。
觸及到的方法1共有下面幾個:
view獲得本身坐標:getLeft(),getTop(),getRight(),getBottom()
view獲得本身寬高:getHeight(),getWidth()
motionEvent獲得坐標:getX(),getY(),getRawX(),getRawY()
首先是view的幾個方法,
獲得本身的寬高的這兩個方法很清楚,不用多說,獲得坐標的這幾個就有點混亂了。
根據上面的圖應當會比較容易明白,圖中屏幕上放了1個ViewGroup布局,里面有個View控件
getTop:獲得到的,是view本身的頂邊到其父布局頂邊的距離
getLeft:獲得到的,是view本身的左側到其父布局左側的距離
getRight:獲得到的,是view本身的右側到其父布局左側的距離
getBottom:獲得到的,是view本身的底邊到其父布局頂邊的距離
在布局的畫布上每次只去更新點擊事件所點擊的對應的控件的位置,那末這里就能夠用view的那4個方法,分別獲得本身的4條邊對應的坐標
從而讓布局去刷新重繪。
固然博客中是使用絕對坐標去計算的,由于這里實現的是1個布局,可能里面還會嵌套另外的布局,經過量次嵌套以后所獲得到的值,是相對控件直接對應的父布局(這個布局有可能已是我們重寫的布局的子布局了)的距離,這樣去刷新的區域肯定是不準確的,所以博客里面使用相對屏幕的絕對坐標計算需要刷新的控件區域。
如果這里自定義的不是布局,而只是1個控件的話,就能夠通過以上方法獲得到坐標,然后要求自己所在的布局去重繪這1區域就能夠了。固然這只是1種思路,其實沒必要去要求布局重繪,完全可以直接view本身重繪就能夠了。
然后是motionEvent的方法:
getX():獲得點擊事件相對控件左側的x軸坐標,即點擊事件距離控件左側的距離
getY():獲得點擊事件相對控件頂邊的y軸坐標,即點擊事件距離控件頂邊的距離
getRawX():獲得點擊事件相對全部屏幕左側的x軸坐標,即點擊事件距離全部屏幕左側的距離
getRawY():獲得點擊事件相對全部屏幕頂邊的y軸坐標,即點擊事件距離全部屏幕頂邊的距離
這些方法可以用在甚么地方呢?
getRawX和getRawY在之前那篇博客里廣泛使用了,可以去那里看用法,getX()和getY()這兩個方法在對view進行自定義的時候可能用的會比較多。
以后有篇博客寫開頭實現的殊效,可以看下,下面是鏈接。
view和view group重寫
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(轉載請說明出處)