我一直试图找到一种方法来实现这一点,到目前为止,我还没有找到一种方法来处理API级别低于24的设备。我试图弄乱绘图缓存,但我得到的只是透明度。我没想到 drawingCache 无论如何,由于视图本身没有任何东西而且一切都进入了 Surface 。
Surface
对于API级别24及更高版本,您可以使用 PixelCopy API 复制全部或部分 SurfaceView 进入位图。
SurfaceView
这是我的(Kotlin)代码的片段:
override fun getPlotBitmap(view: PlotSurfaceView) = Single.create<Bitmap> { val plotBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888) val listener = PixelCopy.OnPixelCopyFinishedListener { copyResult -> when (copyResult) { PixelCopy.SUCCESS -> { it.onSuccess(plotBitmap) } else -> { it.onError(RuntimeException("Pixel copy failed with result $copyResult")) } } } PixelCopy.request(view, plotBitmap, listener, view.handler) }