type
status
date
slug
summary
tags
category
password
icon

Bitmap 是什么

Bitmap 是位图信息的存储,即⼀个矩形图像每个像素的颜⾊信息的存储器。

Drawable 是什么

Drawable 是⼀个可以调⽤ Canvas 来进⾏绘制的上层⼯具。调⽤ Drawable.draw(Canvas) 可以把 Drawable 设置的绘制内容绘制到 Canvas 中。
Drawable 内部存储的是绘制规则,这个规则可以是⼀个具体的 Bitmap,也可以是⼀个纯粹的颜⾊,甚⾄可以是⼀个抽象的、灵活的描述。Drawable 可以不含有具体的像素信息,只要它含有的信息⾜以在 draw(Canvas) ⽅法被调⽤时进⾏绘制就够了。
由于 Drawable 存储的只是绘制规则,因此在它的 draw() ⽅法被调⽤前,需要先调⽤ Drawable.setBounds() 来为它设置绘制边界。

Bitmap 和 Drawable 的互相转换

事实上,由于 Bitmap 和 Drawable 是两个不同的概念,因此确切地说它们并不是互相「转换」,⽽是从其中⼀个获得另⼀个的对象:
  • Bitmap -> Drawable:创建⼀个 BitmapDrawable。
    • Drawable -> Bitmap:如果是 BitmapDrawable,使⽤BitmapDrawable.getBitmap() 直接获取;如果不是,创建⼀个 Bitmap 和⼀个 Canvas,使⽤ Drawable 通过 Canvas 把内容绘制到 Bitmap 中。
       

      ⾃定义 Drawable

      • 怎么做?
        • 重写⼏个抽象⽅法
        • 重写 setAlpha() 的时候记得重写 getAlpha()
        • 重写 draw(Canvas) ⽅法,然后在⾥⾯做具体的绘制⼯作
        • 例如:MeshDrawable
      • 有⽤吗?
        • 有⽤。它就是⼀个更加抽象和专注的、仅仅⽤于绘制的⾃定义 View 模块。
      • ⽤来⼲嘛?
        • 需要共享在多个 View 之间的绘制代码,写在 Drawable ⾥,然后在多个⾃定义 View ⾥只要引⽤相同的 Drawable 就好,⽽不⽤互相粘贴代码。
          例如? 股票软件的多个蜡烛图界⾯,可以把共享的蜡烛图界⾯放进去

          Drawable的常用方式

          获取指定大小的图片资源
       
      属性动画和硬件加速Xfermode 完全使用解析
      Loading...
      shuouyang
      shuouyang
      android开发 ReactNative开发 小程序开发
      最新发布
      AOSP 环境搭建
      2025-3-29
      View 绘制流程-源码解析
      2025-3-12
      HTTP
      2025-3-4
      JVM 虚拟机
      2025-2-28
      蓝牙-BLE-基础
      2025-2-28
      从 OkHttp 的原理来看 HTTP
      2025-2-19
      公告
      🎉热点信息🎉
      --- 1 ---
      Jet Brains 推出新的跨平台支持 Kotlin MultiPlatform
      --- 2 ---
      新的小巧便捷的依赖注入框架 Koin
      --- 3 ---
      新一代 API 查询语言 GraphQL