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来指定图像。哪一个使用?有什么不同?

  1. setImageDrawable(Drawable drawable)
  2. setImageBitmap(Bitmap bm)
  3. setImageResource(int resId)
  4. 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 / setImageUrisetImageBitmap一样。

总而言之,setImageDrawable是其他API所依赖的原始功能。其他3个只是帮助方法,使您编写更少的代码。

此外,记住ImageView实际上有一个Drawable,这不一定是BitmapDrawable是非常重要的!您可以将任何Drawable设置为图像视图。

除了通过Java API设置Drawable之外,您还可以使用XML属性为Drawable设置源ImageView。见下面的例子。请注意,形状可以是图像文件(.png,.jpg,.bmp)或xml文件。

以上是关于setImageBitmap和setImageUri之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章

android: ImageView的setImageBitmap()方法

ImageView.setImageBitmap 为空白

Android ImageView setImageBitmap 不显示图片

imageView.setImageBitmap图像空白(Android 4.4)

c# image转bitmap出现错误

android里为ImageButton设置图片出现混乱