两种方法
fun View.toBitmap(viewWidth: Int, viewHeight: Int): Bitmap? {
layout(0, 0, viewWidth, viewHeight)
buildDrawingCache()
return drawingCache
}
fun View.toBitmap2(): Bitmap? {
var bitmap: Bitmap? = null
// 创建对应大小的bitmap
try {
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap!!)
draw(canvas)
} catch (t: Throwable) {
t.printStackTrace()
}
return bitmap
}
第一种方法是通过 buildDrawingCache 来建立一个缓存 Bitmap,这种方法已经被废弃了,它是在硬件加速诞生前使用的绘制加速策略。
第二种方法是将 View 绘制到 Canvas 上,再由 Canvas 得到 Bitmap,这也是在 buildDrawingCache 的注释里建议采用的方式。
第一种方法可以处理一个 new 的,没绘制过的 view。
第二种方法只能处理绘制过的 view。