当Android 4.0(冰淇淋三明治)发布时,新的视图被引入到sdk中.这个视图是TextureView.在文档中,它表示TextureView可用于显示OpenGL场景的内容.
当您查找如何执行此操作时,您将找到一个示例链接.
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/U5RXFGpAHPE
但是我想用TextureView替换GLSurfaceView,并保持我的其余代码相同,并且只是接受TextureView的优点.
我正在尝试实现以下视图:
如果视图是分层的(从下到上):
TextView)我已经使用GLSurfaceView并TextureView沿着这些线路,都没有成功.我可以将不透明度设置为曲面,但整个视图变为半透明,并且setZOrderOnTop必须设置为true,因此没有窗口小部件可以存在于顶部.我也试过rajawali3d,结果相同
这可以实现吗?使用股票查看?还是图书馆?
更新:也试过JPCT-AE,结果相同.
更新2:似乎有一种方法UnityPlayer可以在使用a时使用浮动OpenGL视图SurfaceView,但在较新的SDK中不再是这种情况.
transparency android glsurfaceview opengl-es-2.0 textureview
我尝试使用GLSurfaceView进行渲染,并通过文档设置格式:
getHolder().setFormat(PixelFormat.TRANSLUCENT);
Run Code Online (Sandbox Code Playgroud)
我使用GLSurfaceView.Renderer,它绘制onDrawFrame:
GLES20.glClearColor(0, 0, 1, .5f);
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
但是,GLSurfaceView中的GL渲染不是半透明的,而是完全蓝色的.如果我省略glClear调用,那么它是全黑的.
如何使GL渲染具有透明背景,以便与后面绘制的视图混合?

编辑:这是我的GLSurfaceView:
class GLView extends GLSurfaceView{
MyRenderer r;
public GLView(Context ctx){
super(ctx);
setEGLContextClientVersion(2);
getHolder().setFormat(PixelFormat.TRANSLUCENT);
setEGLConfigChooser(8, 8, 8, 8, 16, 0);
r = new MyRenderer(getContext());
setRenderer(r);
}
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
Android OpenGL ES透明背景
我想在普通的2d ui布局屏幕上显示一些3d对象.
2d ui屏幕具有背景图像,GLSurfaceView是内容布局的子项.
我在ApiDemos样本中尝试了相同的Translucent GLSurfaceView技术,
但GLSurfaceView清除所有并显示黑色背景.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/my_background_image"
>
...
<android.opengl.GLSurfaceView android:id="@+id/glview"
android:layout_width="fill_parent"
android:layout_height="300px"
android:windowIsTranslucent="true" (i'm not sure this is right)
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
setContentView(R.layout.main);
...
glview = (GLSurfaceView) findViewById(R.id.glview);
glview.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
glview.getHolder().setFormat(PixelFormat.TRANSLUCENT);
glview.setRenderer(this);
...
gl.glClearColor(0, 0, 0, 0);
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以保留底层背景图像吗?
所以我的应用程序中有一个GLSurfaceView由GLSurfaceView.Renderer呈现并使用JPCt作为库.
表面处于不可见的RelativeLayout(可见性:已消失).当我将可见性更改为"可见"然后再返回"已消失"时,布局会按预期显示和隐藏,但GLSurfaceView不显示,它只显示并且不会隐藏,即使我可以单击现在的项目它背后".
这似乎是一些图形缓冲区问题,但我没有找到办法让这个工作......任何想法?谢谢!
android ×5
background ×2
opengl-es ×2
transparent ×2
google-tv ×1
textureview ×1
transparency ×1