我刚刚为此写了一篇文章。希望能够回答你的问题。
https://plus.google.com/112740367348600290235/posts/VNAfFLDcKrw
ImageView
有 4 个 API 来指定图像。使用哪一个?有什么不同?
- setImageDrawable(Drawable drawable)
- setImageBitmap(位图 bm)
- setImageResource(int resId)
- setImageURI(URI URI)
ImageView
,顾名思义,用于显示图像。但什么是图像?一个Bitmap
是图像,不难理解,我们setImageBitmap
为此目的使用。但是,在内部,ImageView
has-aDrawable
但不是 a 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
实际上 has-aDrawable
不一定是 a BitmapDrawable
!您可以将任何设置Drawable
为图像视图。
除了Drawable
通过 Java API 设置之外,您还可以使用 XML 属性来Drawable
设置ImageView
. 请参见下面的示例。请注意,该形状可以是图像文件(.png、.jpg、.bmp)或 xml 文件。