是什么区别setImageBitmap
和setImageDrawable
?
我有我想从文件中动态设置的图像。 我跟着教程说我的转换Bitmap
到BitmapDrawable
然后使用设置setImageDrawable
。 我注意到,设置Bitmap
直接与setImageBitmap
也工作,但我没有注意到任何区别。
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
BitmapDrawable bitmapDrawable = new BitmapDrawable(image);
imageView.setImageDrawable(bitmapDrawable);
要么
Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(image);
还有就是两者之间没有区别内部setImageBitmap
呼吁setImageDrawable
。
下面的代码是从AOSP的ImageView.java挑
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
其实,你可以看到其中的差别,如果你有时会使用null
作为参数:
imageView.setImageDrawable(null);
Drawable d = imageView.getDrawable(); // d == null
imageView.setImageBitmap(null);
Drawable d = imageView.getDrawable(); // d == some BitmapDrawable, != null
所以如果你是在检查可抽拉的存在ImageView
,提防它。
我只是写了一篇文章给这个。 希望能够回答你的问题。
https://plus.google.com/112740367348600290235/posts/VNAfFLDcKrw
ImageView
有4个API来指定图像。 使用哪一个? 有什么不同?
- setImageDrawable(可绘制可绘制的)
- setImageBitmap(位图BM)
- setImageResource(INT居民)
- setImageURI(URI URI)
ImageView
,由名称,用于显示图像。 但究竟什么是形象? 一个Bitmap
是-一个图像,也就不难理解,我们用setImageBitmap
用于这一目的。 但是,在内部, ImageView
有-一个Drawable
,但不是一个Bitmap
,这是什么setImageDrawable
的。 当你调用setImageBitmap
,在内部,首先将位图被包裹BitmapDrawable
,这是-A Drawable
,然后调用setImageDrawable
。
下面是代码。
public void setImageBitmap(Bitmap bm) {
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
那么,怎么样3和4 API?
你应该已经知道,是的方式来创建位图串:从一个文件路径,从输入流,从开放的,还是从资源文件。
BitmapFactory.decodeFile(String pathName)
BitmapFactory.decodeStream(Inputstream)
BitmapFactory.decodeResource(Resource res, int id)
BitmapFactory.decodeByteArray(byte[] data)
意识到这一点,这是很容易理解setImageResource
/ setImageUri
只是同setImageBitmap
。
综上所述, setImageDrawable
是原函数其他API的依赖。 其他3个都只是辅助方法让你写更少的代码。
此外,它记住,这是非常重要ImageView
实际上有-一个Drawable
,不一定是这BitmapDrawable
! 你可以设置任何Drawable
的图像显示。
除了设置Drawable
通过Java API,你也可以使用XML属性设置源Drawable
的ImageView
。 参见下面的例子。 注意,形状可以是任意的图像文件(.PNG,.JPG,.BMP)或XML文件。
这两种方法是有效的,达到同样的效果。 在第一种方法你环绕的可绘制对象,它是任何可以在视图中绘制的抽象您的位图。
约绘项目的特别之处是,他们让你做各种操作的图形对象,他们环绕在(缩放,平移,不透明度等)。
位图是一种可绘制的,您可以进一步了解可绘制在这里: http://developer.android.com/guide/topics/resources/drawable-resource.html
在第二种方法,您可以直接访问位图位没有任何可绘制相关的操作和简单的绘制位图,是对你的看法。
希望这可以帮助,欢呼声,马克斯。
public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
也许不同的是mContext.getResources(),从mContext.getResources()可以得到divice的密度,等等sceen显示是不同