0

我按该顺序将 a cameraView、 aglSurfaceView和 an添加ImageView到 a relativeLayout,但结果是它们从上到下排序(cameraView, imageView, glSurfaceView)有什么具体原因吗?是因为glSurfaceView内部重绘了它的自我吗?

添加的代码片段:

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,必须定义规则以确保一个视图低于另一个视图。

首先,您应该尝试在 XML 中构建您的布局,以便能够在 Eclipse 上查看结果。然后以编程方式应用文件中的所有规则或轻松构建 XML 层次结构,这要归功于LayoutInflater. 如果可以的话,我真的建议你LayoutInflater解决方案,原因有很多(维护、重新格式化、多屏处理……)。

您还应该阅读有关 RelativeLayout 的完整文档以正确格式化:here

于 2012-07-20T22:34:29.813 回答
2

LinearLayout我在尝试将三个常规对象并排放置在 parent 时遇到了相同的排序问题RelativeLayout。要解决此问题,您只需在调用该addView方法时再添加一个参数即可。它是三的第二个参数,它表示您希望添加视图的顺序的索引。

所以这应该适合你:

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

好吧,在尝试了上面的解决方案和其他各种解决方案之后,我的头撞到混凝土近一年了,我终于让它工作了..关键是在添加 glView 之前添加以下行

glView.setZOrderMediaOverlay(true);
rel.addView(camPreview, camParams);
rel.addView(glView, glParams);
rel.addView(imageView, imageParams);
于 2013-05-21T14:15:27.457 回答