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:drawable
和android: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 ,一个定义Drawable的
XML
文件,它根据当前级别值更改另一个Drawable
的大小,创build一个ScaleDrawable
。 -
Shape Drawable ,一个定义几何形状(包括颜色和渐变)的
XML
文件,创build一个ShapeDrawable
。
另请参阅animation资源文档了解如何创buildAnimationDrawable
。
注意:颜色资源也可以用作XML
的Ddrawable
。 例如,创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/
文件夹中,而不是在那里进行优化。