addView命令不起作用

时间:2012-07-20 21:59:04

标签: android android-layout android-view

我按顺序向cameraView添加glSurfaceViewImageViewrelativeLayout,但结果是从上到下排序( cameraViewimageViewglSurfaceView)任何具体原因?是因为glSurfaceView在内部重绘它的自我?

添加代码snippit:

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保持在最前面

3 个答案:

答案 0 :(得分:2)

你没有为RelativeLayout提供足够的规则来添加你的观点,这可能是结果不符合你期望的原因。 例如,必须定义RelativeLayout.BELOW规则以确保视图低于另一个视图。

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

您还应该阅读有关RelativeLayout的完整文档,以便对其进行正确格式化:here

答案 1 :(得分:2)

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

所以这对你有用:

rel.addView(camPreview, 0, camParams);
rel.addView(glView, 1, glParams);
rel.addView(imageView,2, imageParams);

答案 2 :(得分:0)

在尝试了上面的解决方案和各种其他解决方案之后好了,现在已经将我的头撞到混凝土上差不多一年了,我最终还是让它工作了......关键是在添加glView之前添加以下行

glView.setZOrderMediaOverlay(true);
rel.addView(camPreview, camParams);
rel.addView(glView, glParams);
rel.addView(imageView, imageParams);