獲取View的座標和各種距離

自定義控件離不開獲取View的各種座標數據,之前一直掌握的零零碎碎不繫統,現在看了一篇劉望舒的博客豁然開朗講的很好,並且自己也動手測試了一下,感覺很清晰,現在來記錄分享一下,畢竟紙上得來終覺淺,絕知此事要躬行嘛:


圖1:手機屏幕的佈局

圖2:對手機屏幕布局的圖示

Android系統的座標系和普通的數學座標系有點不一樣,主要是Y軸的正方向向下,有點顛覆傳統的認識,廢話不多說,先看怎麼獲取各項數據吧,這裏爲了演示方便,統一隻獲取X軸反方向上的數據。

獲取各種子View到其直接父View的距離,比如圖示2中的A和C:

A=粉色View.getLeft();
C=紅色View.getLeft();

獲取各種View到屏幕邊框的距離,即在Android座標系中的座標,比如B:

B=event.getRawX();//這個方法需要在onTouch裏面使用,因爲是由MotionEvent提供的

獲取手指點擊的位置到被點擊的View的距離,比如D:

D=event.getX();//同樣,這個方法也需要在onTouch裏面使用

下面來一發測試數據:

MainActivity: B=712.4414
MainActivity: D=237.4414
MainActivity: C=105
MainActivity: A=370

那麼這幾種數據有什麼關係,是不是一看就清楚的很呢?對,你沒有看錯:

點擊的位置座標(B)=點擊的位置到被點擊View的距離(D)+被點擊View所有父View到其直接子View的內邊距(A,C);

如果想獲取View自身的width和height,直接getWidth()和getHeight()就好了,但是需要自己提前測量一下,否則你極有可能獲取的是0吆。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章