美文网首页
Bitmap与Drawable

Bitmap与Drawable

作者: 王灵 | 来源:发表于2021-04-08 15:03 被阅读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的作用就体现出来了。

    相关文章

      网友评论

          本文标题:Bitmap与Drawable

          本文链接:https://www.haomeiwen.com/subject/facvkltx.html