您当前的位置: 首页 >  ui

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【高级UI】【013】Bitmap,Picture,Drawable的区别

命运之手 发布时间:2021-10-27 22:32:56 ,浏览量:1

Bitmap

位图,这和我们平常所接触的图片文件的概念,是最相似的

它通过直接保存所有像素色彩值的方式来存储图像

Picture

名字叫图片,但其实它是一个用于记录绘制过程的类

它通过一定的格式,可以把Canvas的drawText,drawLine,drawRect等各种绘制过程全部记录下来,并可以保存起来

当下次需要绘制相同图形时,再取出来就可以直接重新绘制

Picture的效率,甚至比直接调用Canvas的API更加高

因为Canvas在绘制时,需要计算绘制范围,曲线公式等参数,而Picture是直接保存最终结果

Drawable

Drawable是一个接口类,顾名思义,所有可绘制的东西,都可以是Drawable

Drawable是一个非常广泛的概念,它将Android中所有的,各种形式的图像资源,用统一的接口来表示

Drawable接口先将这些图像资源保存起来,然后在需要的时候,将它们绘制到对应View的Canvas上面

Drawable只是一个接口,具体图像如何保存,如何进行绘制,取决于具体子类的实现方式

几乎我们常用的所有图像资源,都有对应的Drawable子类与之对应,比如

BitmapDrawable:resource中的PNG资源,通过文件流读取的JPG图片等,内置了一个Bitmap对象

NinePatchDrawable:resource中的.9PNG资源

ColorDrawable:XmlResource中的color元素

ShapeDrawable:XmlResource中的shape元素

LayerDrawable:XmlResource中的layer-list元素

RippleDrawable:XmlResource中的ripple元素

StateListDrawable:XmlResource中的selector元素

GifDrawable:通过文件流读取的Gif图片

PictureDrawable:通过Picture生成,内置了一个Picture对象

AdaptiveIconDrawable:安卓APK自适应启动图标

这就是Drawable的精髓所在,任何类型的图像,最终都会被转化为Drawable,然后直接绘制到Canvas上即可

不同格式的图像资源如何绘制,由对应的Drawable子类决定即可,图像的使用者根本不用关心实现细节,这就解耦思想

明白这一点,我们也就可以理解,各种千奇百怪的XML资源,最终是如何变成图像的了

其实就是将XML里面的图形描述信息,状态描述信息,记录到Drawable里面,然后根据控件状态,绘制到Canvas上面

性能对比

由上面可以知道,Bitmap的性能最差,Picture的性能最好,Drawable的性能取决于具体的子类

最终结果就是,Picture >= Drawable >= Bitmap

但是这种比较实用意义不大,因为它们的使用场景不同

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0402s