Androidアプリでviewを取得する場所
2572 ワード
Viewクラスのインタフェースコントロールの場所を取得し、新しいコントロールを追加するのに役立ちます.
parent内の相対座標位置を取得する
これは比較的簡単で、言うまでもなく、Viewを直接呼び出す方法:getLeft、getTop、getBottom、getRightが取得します.
画面内の絶対位置を取得する.
getLocalVisibleRect
getGlobalVisibleRect
getLocationOnScreen
getLocationInWindow
よく書けた文章がありますが、次のように投稿されています.http://www.fengfly.com/plus/view-209439-1.html)
=======================================================================
私たちはviewのy座標を取得することに重点を置いています.あなたは知っています.
次の4つの方法を順に説明します.
1.getLocationInWindow
int[] position = new int[2];
textview.getLocationInWindow(position);
System.out.println("getLocationInWindow:" + position[0] + "," + position[1]);
この方法はviewの左上隅座標を配列に格納する.この座標は現在のactivityに対する.
通常activityの場合、y座標は、可視の状態欄の高さ+可視のタイトル欄の高さ+view左上からタイトル欄の底までの距離となる.
ステータスバー/タイトルバーが非表示の場合、その高いは0で計算する.
ダイアログ式のactivityの場合、y座標は表示するタイトルバーの高さ+viewからタイトルバーの底までの距離である.
この場合、ステータスバーの有無は無視する.
2.getLocationOnScreen
int[] position = new int[2];
textview.getLocationOnScreen(position);
System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);
この方法は上との差が少なく、viewの左上隅座標を配列に格納する.しかし、この座標は画面全体に対して相対的である.
y座標はviewの左上から画面上部までの距離である.
3.getGlobalVisibleRect
Rect viewRect = new Rect();
textview.getGlobalVisibleRect(viewRect);
System.out.println(viewRect);
この方法はRectを構築して「カバー」というviewに用いる.このRectの座標は、現在のactivityに対する.
通常activityの場合、Rectのtopは、表示する状態欄の高さ+表示するタイトル欄の高さ+Rectの左上隅からタイトル欄の底部までの距離となる.
ダイアログ式のactivityの場合、y座標がRectのtopは、表示するタイトルバーの高さ+Rect左上からタイトルバーの底までの距離となる.
この場合、ステータスバーの有無は無視する.
4.getLocalVisibleRect
Rect globeRect = new Rect();
button.getLocalVisibleRect(globeRect);
注意:
以上のメソッドはOnCreateメソッドで呼び出す、いずれも0を返します.これは、Viewがまだロードされていないためです.
onWindowFocusChangedメソッドで取得することをお勧めします.onWindowFocusChangedが使いにくい場合(Activity Groupなど)は、次のように書くことができます.
mTextView.post(new Runnable() {
@Override
public void run() {
Rect viewRect = new Rect();
mTextView.getLocalVisibleRect(viewRect);
mTreeScrollView.setRect(viewRect);
}
});
これにより、Viewのロードが完了する後に位置を取得する方法が実行する.
=======================================================================
PS:Viewクラスコントロールを動的に作成する方法:
1、new方法でインタフェースオブジェクトを作成する.
2.Layout xmlリソースによって作成し、LayoutInflaterが提供する方法を利用する.
parent内の相対座標位置を取得する
これは比較的簡単で、言うまでもなく、Viewを直接呼び出す方法:getLeft、getTop、getBottom、getRightが取得します.
画面内の絶対位置を取得する.
getLocalVisibleRect
getGlobalVisibleRect
getLocationOnScreen
getLocationInWindow
よく書けた文章がありますが、次のように投稿されています.http://www.fengfly.com/plus/view-209439-1.html)
=======================================================================
私たちはviewのy座標を取得することに重点を置いています.あなたは知っています.
次の4つの方法を順に説明します.
1.getLocationInWindow
int[] position = new int[2];
textview.getLocationInWindow(position);
System.out.println("getLocationInWindow:" + position[0] + "," + position[1]);
この方法はviewの左上隅座標を配列に格納する.この座標は現在のactivityに対する.
通常activityの場合、y座標は、可視の状態欄の高さ+可視のタイトル欄の高さ+view左上からタイトル欄の底までの距離となる.
ステータスバー/タイトルバーが非表示の場合、その高いは0で計算する.
ダイアログ式のactivityの場合、y座標は表示するタイトルバーの高さ+viewからタイトルバーの底までの距離である.
この場合、ステータスバーの有無は無視する.
2.getLocationOnScreen
int[] position = new int[2];
textview.getLocationOnScreen(position);
System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);
この方法は上との差が少なく、viewの左上隅座標を配列に格納する.しかし、この座標は画面全体に対して相対的である.
y座標はviewの左上から画面上部までの距離である.
3.getGlobalVisibleRect
Rect viewRect = new Rect();
textview.getGlobalVisibleRect(viewRect);
System.out.println(viewRect);
この方法はRectを構築して「カバー」というviewに用いる.このRectの座標は、現在のactivityに対する.
通常activityの場合、Rectのtopは、表示する状態欄の高さ+表示するタイトル欄の高さ+Rectの左上隅からタイトル欄の底部までの距離となる.
ダイアログ式のactivityの場合、y座標がRectのtopは、表示するタイトルバーの高さ+Rect左上からタイトルバーの底までの距離となる.
この場合、ステータスバーの有無は無視する.
4.getLocalVisibleRect
Rect globeRect = new Rect();
button.getLocalVisibleRect(globeRect);
注意:
以上のメソッドはOnCreateメソッドで呼び出す、いずれも0を返します.これは、Viewがまだロードされていないためです.
onWindowFocusChangedメソッドで取得することをお勧めします.onWindowFocusChangedが使いにくい場合(Activity Groupなど)は、次のように書くことができます.
mTextView.post(new Runnable() {
@Override
public void run() {
Rect viewRect = new Rect();
mTextView.getLocalVisibleRect(viewRect);
mTreeScrollView.setRect(viewRect);
}
});
これにより、Viewのロードが完了する後に位置を取得する方法が実行する.
=======================================================================
PS:Viewクラスコントロールを動的に作成する方法:
1、new方法でインタフェースオブジェクトを作成する.
2.Layout xmlリソースによって作成し、LayoutInflaterが提供する方法を利用する.