我正在尝试将文件选择器中的图像加载到ImageView中。
在教程中,我看到它是这样的:
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);
mImageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
但是,我只是尝试了一个简单的
mImageView.setImageUri(mImageUri)
相反,它也适用。我在这里错过了什么吗?如果这些教程适用于1行,为什么这些教程会使用如此大量的代码?
答案 0 :(得分:2)
来自pierrotlefou的Android - ImageView: setImageBitmap VS setImageDrawable回复
ImageView
有4个API来指定图像。哪一个使用?有什么区别?
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
/ setImageBitmap
与setImageDrawable
相同。
总而言之,ImageView
是其他API所依赖的原始函数。其他3个只是辅助方法,可以减少代码编写。
此外,请务必注意Drawable
实际上有一个BitmapDrawable
,这不一定是Drawable
!您可以将任何Drawable
设置为图像视图。
除了通过Java API设置Drawable
之外,您还可以使用XML归因来为ImageView
设置源userData
。见下面的例子。请注意,形状可以是图像文件(.png,.jpg,.bmp)或xml文件。