0

、、、をこの順序で追加していますが、結果として、上から下へ(、、)、特定cameraViewの理由で順序付けられていますか?それは、それが内部的に自己を再描画するためですか?glSurfaceViewImageViewrelativeLayoutcameraViewimageViewglSurfaceViewglSurfaceView

追加のためのコードスニピット:

rel.addView(glView);

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,1);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        params.rightMargin = 20;
        // add Camera to view 
        rel.addView(camPreview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
        rel.addView(glView);
        rel.addView(imageView,params);

質問は本当に..imageViewが常に一番上にあることをどのように保証できますか

GLSurfaceView's onDrawFrameメソッドがビューリストの一番上に移動していると思ったGlSurfaceViewので、次のようなonDrawFrameメソッドからmainActivityのパブリックメソッドへの呼び出しを追加しました。

public void ajustOverlay(){
        imageView.bringToFront();
        Log.v("parent: ", "ajust overlay");
    } 

imageViewそれでもトップを維持していないようです

4

3 に答える 3

2

RelativeLayoutに十分なルールなしでビューを追加しているのは、おそらくそれが結果が期待したものではない理由です。たとえばRelativeLayout.BELOW、ビューが別のビューの下にあることを確認するためにルールを定義する必要があります。

まず、Eclipseで結果を確認できるように、XMLでレイアウトを作成する必要があります。次に、のおかげで、ファイル内にあるすべてのルールをプログラムで適用したり、XML階層を簡単に構築したりできますLayoutInflaterLayoutInflater多くの理由(メンテナンス、改革、マルチスクリーン処理など)で、可能であれば解決策をお勧めします。

また、RelativeLayoutに関する完全なドキュメントを読んで、正しくフォーマットする必要があります:ここ

于 2012-07-20T22:34:29.813 に答える
2

LinearLayout親に3つの通常のオブジェクトを並べて配置しようとして、同じ順序の問題に遭遇しましたRelativeLayoutaddViewこの問題を解決するには、メソッドを呼び出すときにパラメーターをもう 1 つ追加するだけです。これは 3 つの 2 番目のパラメーターであり、ビューを追加する順序のインデックスを表します。

したがって、これはあなたのために働くはずです:

rel.addView(camPreview, 0, camParams);
rel.addView(glView, 1, glParams);
rel.addView(imageView,2, imageParams);
于 2012-08-24T15:28:19.123 に答える