setImageBitmap和setImageUri之间的区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setImageBitmap和setImageUri之间的区别?相关的知识,希望对你有一定的参考价值。
我正在尝试将文件选择器中的图像加载到ImageView中。
在教程中我看到它是这样的:
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);
mImageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
但是,我只是尝试了一个简单的
mImageView.setImageUri(mImageUri)
相反,它也适用。我在这里错过了什么吗?如果这些教程适用于1行,为什么这些教程会使用如此大量的代码?
来自pierrotlefou回答Android - ImageView: setImageBitmap VS setImageDrawable
ImageView
有4个API来指定图像。哪一个使用?有什么不同?
- setImageDrawable(Drawable drawable)
- setImageBitmap(Bitmap bm)
- setImageResource(int resId)
- setImages(URIs)
ImageView
,名称,用于显示图像。但是什么是图像?一个Bitmap
是一个图像,不难理解,我们使用setImageBitmap
为此目的。然而,在内部,ImageView
有一个Drawable
但不是Bitmap
,这就是setImageDrawable
。当你在内部调用setImageBitmap
时,首先将位图包装到BitmapDrawable
,即IS-A Drawable
,然后调用setImageDrawable
。
这是代码。
public void setImageBitmap(Bitmap bm) {
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}
那么,3和4 API怎么样?
您应该已经知道这是创建位图的一系列方法:来自文件路径,来自输入流,来自Uri或来自资源文件。
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
设置为图像视图。
除了通过Java API设置Drawable
之外,您还可以使用XML属性为Drawable
设置源ImageView
。见下面的例子。请注意,形状可以是图像文件(.png,.jpg,.bmp)或xml文件。
以上是关于setImageBitmap和setImageUri之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章
android: ImageView的setImageBitmap()方法
Android ImageView setImageBitmap 不显示图片