自定義控件離不開獲取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);