GLSurfaceView 之上的 Android 视图同步

Zac*_*ean 6 android opengl-es surfaceview glsurfaceview textureview

有没有一种好方法可以View在a之上绘制标准Android对象GLSurfaceView并同步两层之间的移动?

\n

我的布局看起来像

\n
<FrameLayout>\n     <RelativeLayout>\n     <MyCustomGLSurfaceView>\n</FrameLayout>\n
Run Code Online (Sandbox Code Playgroud)\n

MyCustomGLSurfaceView实现了一个摄像头,当用户适当地触摸屏幕时,该摄像头就会移动。

\n

在渲染器中的回调结束时,onDrawFrame()我调用回调来告诉RelativeLayout相机已移动,并且它应该根据需要更新任何子视图的位置。

\n

为了尝试同步两个层,我正在执行以下操作:

\n
    \n
  • 设定renderMode = RENDERMODE_WHEN_DIRTY范围内MyCustomGLSurfaceView
  • \n
  • MyCustomGLSurfaceView实现Choreographer.FrameCallback并在doFrame(frameTimeNanos: Long)方法调用中requestRender()
  • \n
  • onDrawFrame 调用回调来指示相机已移动,并RelativeLayout根据需要更新 it\xe2\x80\x99s 子视图的位置。
  • \n
  • 将相机的位置延迟 1 帧,因为MyCustomGLSurfaceView看起来 AndroidView对象直到下一帧才在屏幕上更新,而 则MyCustomGLSurfaceView立即更新。
  • \n
\n

其理论是,通过侦听Choreographer回调,渲染MyCustomGLSurfaceView会在应用程序重新绘制标准 UI 元素的同时进行。

\n

这似乎工作得相当好,但 Android 对象层中存在明显的卡顿View。另外,通过设置边距来定位 Android 层中的元素View会出现一些奇怪的行为(视图在离开屏幕时会被破坏,并且并不总是重新出现,有时甚至根本停止更新)。我尝试使用它们来定位它们translationX / translationY,但是两层之间的同步不太好。

\n

有没有一个好的方法来实现这种同步?

\n

我认为使用 a 可能比使用 a 更好,TextureView因为GLSurfaceViewaTextureView被合成到视图层次结构中而不是作为一个单独的表面,所以我认为也许同步会自然而然地消失。

\n