1

メディアプレーヤーに表示されるヘルプ画面を作成しようとしています。アイデアは、現在のビューの上に透明なテーマのフラグメントを配置することです。(基本的な考え方については、いくつかの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つのビューで見栄えが良くなるまでパラメーターを変更したりできますが、これは多くの矢印の最初のものであり、多くのデバイスをサポートする必要があります。ボタンの位置を渡すだけで、ファンキーな場所に描画されないようにする必要があります。

4

1 に答える 1

0

あなたが正しく理解している場合は、フラグメントの上に半透明のヘルプ画面オーバーレイを表示しようとしています。そのオーバーレイは、以下のフラグメントのビューの UI 要素を示しています。

そのため、次の 2 つの可能性があります。

オプション1

ヘルプ画面 Fragment / Activity を開始する前に、ヘルプを提供するすべてのビュー要素の位置情報を取得する必要があります。

そのためにView.getLocationOnScreenを使用できます。

次に、位置データを各 UI 要素の識別子とともにヘルプ画面に渡します。たとえば、インテントの追加値として。

ヘルプ コンポーネントは、これらの座標を取得して、矢印の絶対位置を計算する必要があります。

オプション 2

Fragment のビューと同じ配置と寸法を持つヘルプ レイアウト XML ファイルを作成します。そのヘルプ レイアウトを使用して、ラベルと矢印のグラフィックを正しく配置します。これらの要素を配置するには、マージン/パディングを使用してください。

于 2012-06-25T21:10:49.973 に答える