当前,我有一个自定义视图,需要在主视图的子区域上绘制自己。
主位图的大小大于自定义视图的绘图区域。目前,这就是我的代码的样子。尽管它可以工作,但我认为应该有一种进一步优化它的方法。
// Code in a custom View
private fun getBitmap(): Bitmap {
val resources = context.resources
// Creating a larger master bitmap.
val screenWidth = resources.getDisplayMetrics().widthPixels;
val screenHeight = resources.getDisplayMetrics().heightPixels;
val masterBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888)
val masterCanvas = Canvas(masterBitmap)
masterCanvas.drawColor(Color.WHITE)
// Creating a smaller child bitmap.
val childBitmap = Bitmap.createBitmap(
masterBitmap,
(screenWidth-width) shr 1,
(screenHeight-height) shr 1,
width,
height
)
// Perform drawing on smaller child bitmap.
val childCanvas = Canvas(childBitmap)
draw(childCanvas)
// Copy the smaller child bitmap back to larger master bitmap.
masterCanvas.drawBitmap(
childBitmap,
((screenWidth-width) shr 1).toFloat(),
((screenHeight-height) shr 1).toFloat(),
Paint()
)
}
因此,该步骤可以概括如下
我想知道,有没有一种方法可以消除第4步:将较小的子位图复制回较大的主位图。?
是否可以创建一个子位图,其数据存储区直接共享主位图的相同数据存储区?这样,Bitmap.createBitmap
将使用新分配的内存创建一个新的Bitmap实例。
我想要的步骤是
我想知道,是否有任何API使我能够直接映射到较大的主位图来创建较小的子位图。?