Bitmap和Drawable以及手写MaterialEditText
hencoder课程
Bitmap 和 Drawable
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就好,⽽不⽤互相粘贴代码。例如?
股票软件的多个蜡烛图界⾯,可以把共享的蜡烛图界⾯放进去
手写 MaterialEditText
这部分的没有写讲义,多看看视频做笔记吧。
记得做作业!!