メディアプレーヤーに表示されるヘルプ画面を作成しようとしています。アイデアは、現在のビューの上に透明なテーマのフラグメントを配置することです。(基本的な考え方については、いくつかのAndroidアプリやICSで見られるようなヘルプオーバーレイを作成するにはどうすればよいですか?を参照してください)。これで、前述のリンクの手順は理解できましたが、それぞれの横にある円と矢印と段落を(それぞれが何であるかを説明して)下のオブジェクトに接続するにはどうすればよいですか?例、私はオブジェクトを持っています:
R.id.music_button
そして、音楽ボタンを指す矢印があるようにしたいです。私たちと同じくらい多くのデバイスをサポートしようとすると、トップレイアウトの一部としていくつかの絵を描き、それらが整列することを期待することは非常に困難になります。繰り返しますが、トップレベルより下のフラグメントでオブジェクトを参照するにはどうすればよいですか?
ありがとう
更新1: Nobu Gamesからのアドバイスに従って、場所を保存してヘルプフラグメントに渡しました。
View helpedButton = getView().findViewById(R.id.my_sources_button);
int[] location = { 0, 0 };
helpedButton.getLocationOnScreen(location);
これは正しいと思いますが、矢印を描画することができません。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_help_main_menu, container, false);
DebugLog.d(TAG, "View v is: " + v);
RelativeLayout mainHelp = (RelativeLayout) v.findViewById(R.id.mainHelpLayout);
DebugLog.d(TAG, "Layout is: " + mainHelp);
ImageView arrow = new ImageView(getActivity());
arrow.setX(location[0]);
arrow.setY(location[1]);
arrow.setImageResource(R.drawable.arrow1);
arrow.setVisibility(arrow.VISIBLE);
DebugLog.d(TAG, "Location x: " + location[0]);
DebugLog.d(TAG, "Location y: " + location[1]);
arrow.bringToFront();
DebugLog.d(TAG, "CIRCLE " + arrow);
mainHelp.addView(arrow);
return v;
}
UPDATE 2 getLocationOnScreenとgetLocationInWindowを使用すると、奇妙な結果が得られます。私が矢印を描画しようとしているボタンも画面の右下にあり、下と右の両方にいくつかのパディングがあります。私が取得している座標は、SonyGTVではx=1319と716です。使用する場合
LayoutParams params = new RelativeLayout.LayoutParams(60, 40);
params.topMargin = y;
params.leftMargin = x;
矢印が描かれていますが、ファンキーな場所もあります。数学を使用したり、1つのビューで見栄えが良くなるまでパラメーターを変更したりできますが、これは多くの矢印の最初のものであり、多くのデバイスをサポートする必要があります。ボタンの位置を渡すだけで、ファンキーな場所に描画されないようにする必要があります。