发布Android 4.0( Ice Cream Sandwich )时,SDK中引入了新 View 。该 View 是TextureView。在文档中,它说TextureView可用于显示OpenGL场景的内容。

当您查找如何执行此操作时,您会找到一个示例的链接。

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/U5RXFGpAHPE

但是,我只想将GLSurfaceView替换为TextureView,并保持其余代码不变,并且只享受TextureView的优点。

最佳答案

答案:

1)从GLSurfaceView的源代码开始,将文件命名为GLTextureView.java

2)将标题更改为:
GLTextureView扩展TextureView实现SurfaceTextureListener

3)将构造函数重命名为GLTextureView。从init()方法中删除代码。

4)组织进口。始终选择非GLSurfaceView选项。

5)查找每个SurfaceHolder实例并将其更改为SurfaceTexture

6)为SurfaceTextureListener添加未实现的方法,每个方法应如下:

  • onSurfaceTextureAvailable-surfaceCreated(surface)
  • onSurfaceTextureDestroyed-surfaceDestroyed(surface),(返回true)
  • onSurfaceTextureSizeChanged-surfaceChanged(surface,0,width,height)
  • onSurfaceTextureUpdated-requestRender()

  • 7)应该在一行中调用getHolder(),将其更改为getSurfaceTexture()

    8)在init()方法中,将以下行setSurfaceTextureListener(this)
    然后添加一个OnLayoutChangeListener,并将其称为surfaceChanged(getSurfaceTexture(), 0, right - left, bottom - top)

    这样一来,您应该可以将GLTSurfaceView代码替换为GLTextureView并获得GLTextureView的好处。还要确保您的应用支持硬件加速,并且您的渲染器扩展了GLTextureView .Renderer。

    08-18 10:11