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

时间:2012-01-20 05:14:32

标签: android

我用谷歌搜索但我找不到任何文章来描述Android中Bitmap和Drawable之间的区别。

4 个答案:

答案 0 :(得分:59)

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

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

答案 1 :(得分:34)

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

位图 - 是Drawable的特定类型,它是图像,如:PNG,JPEG左右

答案 2 :(得分:13)

位图不是图像。位图是位图(注释名称:位图)。此地图表示可以绘制内容的像素。它可能是您自己的自定义位图(而不是图像),例如square:

Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);

或者你可以从图像创建Bitmap对象:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);    

Bitmap是像素持有者。 Canvas用于在位图上绘制内容(在位图像素上)。

关于Drawable的一切都在上面有详细描述。

<强> TL; DR

有些人写道你在Canvas上画画。你不在Canvas上画画。您使用Canvas帮助方法绘制位图像素。

Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.RED) // now all bitmap pixels became red

答案 3 :(得分:12)

可绘制资源

Drawable资源是可以绘制到屏幕上的图形的一般概念,您可以使用getDrawable(int)等API检索该图形,或者应用于android:drawable等属性的其他XML资源。 1}}和android:icon。有几种不同类型的drawable:

  • 位图文件,位图图形文件(.png,.jpg或.gif)创建BitmapDrawable

  • Nine-Patch File ,一个PNG文件,其中包含可伸缩区域,允许根据内容(.9.png)调整图像大小,创建NinePatchDrawable

  • 图层列表,一个管理其他Drawable数组的Drawable。这些是按数组顺序绘制的,因此具有最大索引的元素将绘制在顶部,创建LayerDrawable

  • 状态列表,一个XML文件,引用不同状态的不同位图图形(例如,按下按钮时使用不同的图像),创建一个{ {1}}。

  • 级别列表,一个StateListDrawable文件,用于定义管理多个备用XML的{​​{1}},每个都分配了一个最大数值,创建Drawable

  • Transition Drawable ,一个Drawable文件,用于定义可以在两个LevelListDrawable资源之间交叉淡入淡出的XML,创建一个{{1} }}

  • Inset Drawable ,一个Drawable文件,用于定义Drawable,使另一个TransitionDrawable与指定的距离相互隔离。当XML需要的背景Drawable小于View的实际范围时,此功能非常有用。

  • Clip Drawable ,一个Drawable文件,用于定义View,根据此Drawble的当前内容剪切另一个XML级别值,创建Drawable

  • Scale Drawable ,一个Drawable文件,定义Drawable根据其当前级别值更改另一个ClipDrawable的大小,创建XML

  • Shape Drawable ,定义几何形状(包括颜色和渐变)的Drawable文件会创建Drawable

另请参阅动画资源文档,了解如何创建ScaleDrawable

注意:颜色资源也可以用作XML中的ShapeDrawable。例如,在创建AnimationDrawable时,您可以引用Ddrawable属性(XML)的颜色资源。

<强>位图

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

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

注意:在构建过程中,aapt工具可以使用无损图像压缩自动优化位图文件。例如,不需要超过256种颜色的真彩色PNG可以转换为带有调色板的8位PNG。这将产生质量相同但需要较少内存的图像。因此请注意,放置在此目录中的图像二进制文件可能会在构建期间发生更改。如果您打算将图像作为位流读取以将其转换为位图,请将图像放在StateListDrawable文件夹中,而不是优化它们。