我正在使用OpenGL在android中的GLSurfaceView上动态渲染图像。 该应用程序可以完美地运行(静态)基于XML的布局,并具有自定义GLSurfaceView的多个实例。 (图片左上角和右上角)
如果这些实例通过可见性值动态交换,则最后一个可见的OpenGL图像仍然位于新的可见顶部之上。 (图像左下角和右下角)
左上角图片: 4个实例,正常大小
右上角图片: 4个实例,大尺寸
左下角图片: 1个实例,正常尺寸(左上图为不需要的叠加)
右下图: 1个实例,大尺寸(左上图为不需要的叠加)
到目前为止我尝试了什么:
不需要的图像不会随着布局回流而改变,例如视图的可见性更改。 只有当GLSurfaceView超过另一个GLSurfaceView(由android :: visibility =“gone”隐藏)时,它们才可见。 如果使用ImageView,则没有问题。 第一个创建的实例没有这个问题,因为它位于子堆栈的顶部(或底部?)并且位于其兄弟之上。
我猜android只支持一个基于OpenGL的视图,它被GLSurfaceView的所有实例使用。 所有实例似乎都有一些偏好(尤其是可见性),所以它不能只是关闭或移出。
GLSurfaceView级:
public class Panel extends GLSurfaceView implements Renderer {
private static native void nativeRender();
public Panel(Context context) {
super(context);
this.setRenderer(this);
this.setRenderMode(RENDERMODE_WHEN_DIRTY);
}
public void onDrawFrame(GL10 gl) {
nativeRender();
}
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
super.surfaceDestroyed(holder);
}
public void callback() {
this.requestRender();
}
}
那么可以在彼此之内(特别是在顶部)使用多个OpenGL视图吗?有没有更好的方法来交换它们而不使用可见性值?
答案 0 :(得分:0)
我遇到了同样的问题并且无法解决问题,因为我终于明白,如果我们制作另一个GLSurfaceView的可视性GONE&它不会回到屏幕上方。 但我用一招来解决了这个问题。我没有隐藏视图,而是将它的宽度和高度更改为1像素,这使得视图对用户不可见。当我需要展示它时,我改变了宽度和宽度。通过LayoutParams的高度。它部分解决了我的问题。我告诉你我的代码
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/smallVideoRenderLayoutIncoming"
android:layout_width="1dp"
android:layout_height="1dp"
android:background="@color/transparent"
android:orientation="vertical"/>
<LinearLayout
android:id="@+id/largeVideoRenderLayoutIncoming"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ConstantFunctions.dpToPx(120),ConstantFunctions.dpToPx(170));
smallVideoRenderLayoutIncoming.setLayoutParams(layoutParams);
当我需要显示它时,我根据需要更改了它的大小。