Android中的Bitmap和Drawable有什么区别?

我google了,但我找不到任何文章来描述在Android中的位图和绘制的区别。

位图是位图图像的表示(类似java.awt.Image)。 可绘制是“可以绘制的东西”的抽象。 它可能是一个Bitmap(包装为BitmapDrawable ),但也可以是纯色,其他Drawable对象或任何其他结构的集合。

大多数Android UI框架喜欢使用Drawable对象,而不是Bitmap对象。 View可以接受任何Drawable作为背景。 ImageView可以显示前景Drawable。 作为资源存储的图像作为可绘制对象加载。

Drawable是可以绘制的东西。 如布局,vector图像(线,圆),字体,图像等

位图 – 是特定types的Drawable,它是图像,如:PNG,JPEG等等

可绘制的资源

Drawable资源是可以绘制到屏幕的graphics的一般概念,您可以使用API​​(如getDrawable(int)检索graphics,也可以将其应用于具有诸如android:drawableandroid:icon等属性的其他XML资源。 有几种不同types的drawable:

  • 位图文件 ,位图graphics文件(.png,.jpg或.gif)创build一个BitmapDrawable

  • Nine-Patch文件 ,带有可伸缩区域的PNG文件,允许基于内容(.9.png)进行图像大小调整,创build一个NinePatchDrawable

  • 层列表 ,一个pipe理其他Drawable数组的Drawable 。 这些按照数组顺序绘制,所以具有最大索引的元素绘制在顶部,创build一个LayerDrawable

  • 状态列表 ,一个XML文件,为不同的状态引用不同的位图graphics(例如,按下button时使用不同的图像),创build一个StateListDrawable

  • 级别列表 ,一个XML文件,它定义了一个pipe理多个可选Drawable ,每个可分配一个最大数值,创build一个LevelListDrawable

  • Transition Drawable ,一个XML文件,定义了一个可以在两个Drawable资源之间交叉淡化的Drawable ,创build一个TransitionDrawable

  • 插入Drawable ,一个XML文件,它定义一个Drawable ,将另一个Drawable按指定的距离插入。 当View需要一个小于View实际边界的Drawble背景时,这是非常有用的。

  • Clip Drawable ,一个XML文件,它定义了一个Drawable ,基于这个Drawable的当前级别值ClipDrawable另一个Drawable ,创build一个ClipDrawable

  • Scale Drawable ,一个定义DrawableXML文件,它根据当前级别值更改另一个Drawable的大小,创build一个ScaleDrawable

  • Shape Drawable ,一个定义几何形状(包括颜色和渐变)的XML文件,创build一个ShapeDrawable

另请参阅animation资源文档了解如何创buildAnimationDrawable

注意:颜色资源也可以用作XMLDdrawable 。 例如,创build一个StateListDrawable ,可以引用android:drawable属性的颜色资源( android:drawable="@color/green" )。

位图

位图图像。 Android支持三种格式的位图文件:.png(首选),.jpg(可接受),.gif(不鼓励)。

您可以直接引用位图文件,使用文件名作为资源ID,或使用XML创build别名资源ID。

注意:在构build过程中,aapt工具可以自动优化位图文件的无损图像压缩。 例如,不需要超过256色的真彩色PNG可以通过调色板转换为8位PNG。 这将导致质量相同的图像,但需要较less的内存。 因此,请注意,放置在此目录中的图像二进制文件在构build期间可能会更改。 如果您打算将图像作为位stream读取以将其转换为位图,请将图像放在res/raw/文件夹中,而不是在那里进行优化。