我按顺序向cameraView
添加glSurfaceView
,ImageView
和relativeLayout
,但结果是从上到下排序( cameraView
,imageView
,glSurfaceView
)任何具体原因?是因为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
保持在最前面
答案 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);