setImageBitmap和setImageUri之间的区别?

时间:2017-12-31 22:43:06

标签: android bitmap uri

我正在尝试将文件选择器中的图像加载到ImageView中。

在教程中,我看到它是这样的:

try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);
        mImageView.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }

但是,我只是尝试了一个简单的

mImageView.setImageUri(mImageUri)
相反,它也适用。我在这里错过了什么吗?如果这些教程适用于1行,为什么这些教程会使用如此大量的代码?

1 个答案:

答案 0 :(得分:2)

来自pierrotlefouAndroid - ImageView: setImageBitmap VS setImageDrawable回复

ImageView有4个API来指定图像。哪一个使用?有什么区别?

  1. setImageDrawable(Drawable drawable)
  2. setImageBitmap(Bitmap bm)
  3. setImageResource(int resId)
  4. setImageURI(URI uri)
  5. ImageView,名称,用于显示图像。但是什么是图像? Bitmap是一张图片,不难理解,我们会为此目的使用setImageBitmap。但是,在内部,ImageView有一个Drawable但不是Bitmap,而setImageDrawable就是setImageBitmap。当您在内部致电BitmapDrawable时,首先将位图包装到Drawable,即IS-A setImageDrawable,然后调用public void setImageBitmap(Bitmap bm) { setImageDrawable(new BitmapDrawable(mContext.getResources(), bm)); }

    这是代码。

    BitmapFactory.decodeFile(String pathName)
    BitmapFactory.decodeStream(Inputstream)
    BitmapFactory.decodeResource(Resource res, int id)
    BitmapFactory.decodeByteArray(byte[] data)
    

    那么,3和4 API呢?

    您应该已经知道这是创建位图的一系列方法:从文件路径,输入流,Uri或资源文件。

    setImageResource

    意识到这一点,很容易理解setImageUri / setImageBitmapsetImageDrawable相同。

    总而言之,ImageView是其他API所依赖的原始函数。其他3个只是辅助方法,可以减少代码编写。

    此外,请务必注意Drawable实际上有一个BitmapDrawable,这不一定是Drawable!您可以将任何Drawable设置为图像视图。

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