android--擷取view或者view事件發生的座標的方法

來源:互聯網
上載者:User

標籤:

涉及到的方法一共有下面幾個:

view擷取自身座標:getLeft(),getTop(),getRight(),getBottom()

view擷取自身寬高:getHeight(),getWidth()

motionEvent擷取座標:getX(),getY(),getRawX(),getRawY()


首先是view的幾個方法,

擷取自身的寬高的這兩個方法很清楚,不用多說,擷取座標的這幾個就有點混亂了。

根據上面的圖應該會比較容易明白,圖中螢幕上放了一個ViewGroup布局,裡面有個View控制項

getTop:擷取到的,是view自身的頂邊到其父布局頂邊的距離

getLeft:擷取到的,是view自身的左邊到其父布局左邊的距離

getRight:擷取到的,是view自身的右邊到其父布局左邊的距離

getBottom:擷取到的,是view自身的底邊到其父布局頂邊的距離

這些方法擷取到的資料可以用在什麼地方呢?
比如要實現一個自訂的特殊布局,像http://blog.csdn.net/singwhatiwanna/article/details/42614953
這裡要實現的是一個水波紋特效布局,該布局內的任何控制項點擊後都會出現波紋效果
那麼在點擊了布局內的一個控制項之後,就要通過不斷重新整理布局,去更新這個控制項上面的波紋半徑,為了節省資源,每次重新整理布局都時候不會整個布局都重新整理,而只是通過

[java] view plaincopyprint?
  1. postInvalidateDelayed(INVALIDATE_DURATION, left, top, right, bottom);    

在布局的畫布上每次只去更新點擊事件所點擊的對應的控制項的位置,那麼這裡就可以用view的那四個方法,分別擷取自身的四條邊對應的座標

從而讓布局去重新整理重繪。

當然部落格中是使用絕對座標去計算的,因為這裡實現的是一個布局,可能裡面還會嵌套另外的布局,經過多次嵌套之後所擷取到的值,是相對於控制項直接對應的父布局(這個布局有可能已經是我們重寫的布局的子布局了)的距離,這樣去重新整理的地區肯定是不準確的,所以部落格裡面使用相對螢幕的絕對座標計算需要重新整理的控制項地區。

如果這裡自訂的不是布局,而只是一個控制項的話,就可以通過以上方法擷取到座標,然後要求自己所在的布局去重繪這一地區就可以了。當然這隻是一種思路,其實沒必要去要求布局重繪,完全可以直接view自身重繪就可以了。


然後是motionEvent的方法:

getX():擷取點擊事件相對控制項左邊的x軸座標,即點擊事件距離控制項左邊的距離

getY():擷取點擊事件相對控制項頂邊的y軸座標,即點擊事件距離控制項頂邊的距離

getRawX():擷取點擊事件相對整個螢幕左邊的x軸座標,即點擊事件距離整個螢幕左邊的距離

getRawY():擷取點擊事件相對整個螢幕頂邊的y軸座標,即點擊事件距離整個螢幕頂邊的距離

這些方法可以用在什麼地方呢?

getRawX和getRawY在之前那篇部落格裡廣泛使用了,可以去那裡看用法,getX()和getY()這兩個方法在對view進行自訂的時候可能用的會比較多。

之後有篇部落格寫開頭實現的特效,可以看下,下面是連結。

view和view group重寫

android--擷取view或者view事件發生的座標的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.