我正在使用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获得性能提升。