Bitmap与Drawable
2021-04-08 本文已影响0人
王灵
Bitmap和Drawable分别是什么
- bitmap:****位图(Bitmap),又称栅格图(英语:Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。
- Drawable:在Android中drawable是一套绘制规则,是一个view绘制模块
Bitmap和Drawable的互相转换及本质
bitmap->drawable
//BitmapDrawable的`public void draw(Canvas canvas) `函数的实质就是`canvas.drawBitmap`
BitmapDrawable(resources, bitmap)
drawable->bitmap
fun Drawable.toBitmap(
@Px width: Int = intrinsicWidth,
@Px height: Int = intrinsicHeight,
config: Config? = null
): Bitmap {
//先判断这个drawable是不是BitmapDrawable类型,如果是直接取出其中的bitmap
if (this is BitmapDrawable) {
if (config == null || bitmap.config == config) {
// Fast-path to return original. Bitmap.createScaledBitmap will do this check, but it
// involves allocation and two jumps into native code so we perform the check ourselves.
if (width == intrinsicWidth && height == intrinsicHeight) {
return bitmap
}
return Bitmap.createScaledBitmap(bitmap, width, height, true)
}
}
//如果不是bitmap类型,则创建bitmap,然后使用bitmap创建画布`Canvas(bitmap)`然后用drawable在画布上绘制。于是bitmap上就有了对应的像素信息
val (oldLeft, oldTop, oldRight, oldBottom) = bounds
val bitmap = Bitmap.createBitmap(width, height, config ?: Config.ARGB_8888)
setBounds(0, 0, width, height)
draw(Canvas(bitmap))
setBounds(oldLeft, oldTop, oldRight, oldBottom)
return bitmap
}
自定义Drawable意义
drawable的意义就在于视图复用。最常见的recycleview的itemview,我们一般都会自定义一个itemview,里面包换布局信息和交互处理;然后如果有这么一个需求,需要用自定义view实现横竖两种布局样式,而在横竖两种布局样式中都包含一个同样的绘制部分,那自定义drawable的作用就体现出来了。