2012年5月30日水曜日

Androidでグローバル座標系でのViewのRectを得るには?

Viewのローカル座標系でのRectを得るには、View.getTop()、View.getLeft()などで得られる値を使えばいいということはわかる。

では、そのViewのグローバル座標系(スクリーン座標系)でのRectを得るには?

Rect rectInGlobal = new Rect();
view.getGlobalVisibleRect(rectInGlobal);
Log.v("ViewRectInGlobal", "rectInGloabal=" + rectInGlobal);

たったこれだけだった。相当ハマった。(*´Д`)

つまり、このrectInGlobalから得られるtopやleftなどの値は、そのViewの左上をクリックした時のMotionEvent.getRawX()やMotionEvent.getRawY()で得られる値と一致する。

この値は、例えばPopupWindowなどを正確に配置する時などに役立つ。

View.getGlobalVisibleRect(Rect, Point)というバリエーションメソッドもある。これを使えばAS3でいうところのDisplayObject.localToGlobal()やDisplayObject.globalToLocal()的なメソッドも作れそう。