2 つのフラグメント (ViewPager を使用) を使用してアプリを構築しています。各フラグメントは 4 つのボタンで構成されます。これらのボタンで onTouch リスナーも使用します。getLocationOnScreen(...) メソッドを使用して、画面上のビュー (ボタン) の位置を取得します。しかし、最初のフラグメントから 2 番目のフラグメントにスライドすると、次の 4 つのボタンの位置は最初のフラグメントに相対的になります。つまり、これらのボタンの x 座標は、前のフラグメントの幅を考慮しています。私の質問は、前のページではなく、このフラグメント ページに対する 2 番目のフラグメントのボタンの位置を取得するにはどうすればよいですか?
ありがとう!
編集: コードスニペットを追加しました:
これは、画面上のボタンの位置をハッシュマップコレクションに保持する方法です(これは、私が持っている2つのフラグメントのそれぞれに対して行われます):
public void getViewsPosition(final ArrayList<View> viewArr) {
for (final View v : viewArr) {
final ViewTreeObserver vto = v.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int[] i = new int[2];
v.getLocationOnScreen(i);
_rect = new Rect(i[0], i[1], i[0] + v.getWidth(), i[1]
+ v.getHeight());
view_to_rect.put(v, _rect);
if (Build.VERSION.SDK_INT < 16) {
vto.removeGlobalOnLayoutListener(this);
} else {
vto.removeOnGlobalLayoutListener(this);
}
}
});
}
}
これにより、最初のフラグメントのボタンの正しい座標が維持されます。ただし、2 番目のフラグメントの場合、x 座標は最初のフラグメントを基準としています。したがって、このフラグメント内のボタンの x 座標と最初のフラグメントの幅を取得します。もちろん、y座標はすべてのフラグメント内で正しいです。