2012-07-20 62 views
0

我增加了cameraView,一个glSurfaceView,并在为了一个ImageViewrelativeLayout,但结果他们从顶部下到上排序(cameraViewimageViewglSurfaceView)任何具体的原因是什么?是因为glSurfaceView重新绘制它自己的内部?addView为了不工作

代码片段为加法:

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 方法使GlSurfaceView到视图列表的顶部,所以我说一个电话回从onDrawFrame方法在mainActivity的公共方法,看起来像这样:

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

这似乎仍不保持imageView之上

+0

也许您可以使用视图层次结构工具? – 2012-07-20 22:23:07

回答

0

好吧,我ifnally有工作..关键:

所以这应该为你工作在添加glView之前添加以下行:

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

你将你的看法,并没有一个足够RelativeLayout的规则,这也许是原因,结果不是你所期望的。 例如,必须定义RelativeLayout.BELOW规则以确保视图低于另一个视图。

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

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

+0

RelativeLayout.BELOW将一个视图,底部对齐到另一个正确的顶部?多数民众赞成那不是我想要做的,我试图覆盖另一个视图 – erik 2012-07-21 13:33:43

+0

好,所以'RelativeLayout'应该适合您的情况。你还是可以使用'LayoutInflater'来实现你的视图吗? – 2012-07-21 13:42:26

+0

我没有使用layoutInflater,因为没有现有的xml布局。 – erik 2012-07-21 13:48:20

2

我遇到了相同的排序问题,试图通过侧三个常规LinearLayout对象侧放置在父RelativeLayout。要解决该问题,只需在调用addView方法时添加一个参数即可。它是三的第二个参数,它代表您希望添加视图的顺序的索引。尝试解决上述和其他各种解决方案,现在敲我的头撞在水泥将近一年后

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