Android将GameActivity视图捕获为位图



我正在使用Jetpack的GameActivity在Android中渲染我的游戏,并在Kotlin代码的顶部添加了一些本地视图。我想要一种将整个屏幕捕获为位图的方法,但不知何故,OpenGL渲染的东西不会出现在保存的位图上,只有"位图";正常的";安卓视图。

这就是我捕捉位图的方式:

private fun captureGameImage(v: View): Bitmap {
val b = Bitmap.createBitmap(v.width, v.height, Bitmap.Config.ARGB_8888)
val c = Canvas(b)
v.draw(c)
return b
}

在我的onCreate上,这就是我获得rootView的方式,稍后我将其发送到该方法。我膨胀了覆盖布局并添加到其中:

val overlayViews = layoutInflater.inflate(R.layout.widgets, null)
rootView = (findViewById<View>(android.R.id.content) as ViewGroup)
rootView.addView(overlayViews)

然后在某个时刻我调用:

captureGameImage(rootView)

同样,创建的位图具有overlayViews上的所有视图,但游戏本身并不存在。我甚至调试了captureGameImage函数,事实上v有两个子视图,游戏一和叠加视图,但不知何故,游戏一没有在位图中捕获。

有什么想法可以捕捉整个视图,包括游戏渲染的东西吗?

您可以通过重写自己派生的Activity:中的GameActivity.onCreateSurfaceView((来禁用SurfaceView渲染

final var mContentView: View? = null
/**
* Creates an empty View for the launching activity, prevent GameActivity from creating the
* default SurfaceView.
*/
@Override
protected void onCreateSurfaceView() {
mSurfaceView = null;
getWindow().takeSurface(this);
mContentView = new View(this);
setContentView(mContentView);
mContentView.requestFocus();
}

然后进行捕获,并将其放回生产版本,以便使用SurfaceView获得性能提升。

最新更新