Android的 - ImageView的:VS setImageBitmap setImageD

2019-06-27 02:56发布

是什么区别setImageBitmapsetImageDrawable

我有我想从文件中动态设置的图像。 我跟着教程说我的转换BitmapBitmapDrawable然后使用设置setImageDrawable 。 我注意到,设置Bitmap直接与setImageBitmap也工作,但我没有注意到任何区别。

Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
BitmapDrawable bitmapDrawable = new BitmapDrawable(image);
imageView.setImageDrawable(bitmapDrawable);

要么

Bitmap image = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
imageView.setImageBitmap(image);

Answer 1:

还有就是两者之间没有区别内部setImageBitmap呼吁setImageDrawable

下面的代码是从AOSP的ImageView.java

public void setImageBitmap(Bitmap bm) {
    // if this is used frequently, may handle bitmaps explicitly
    // to reduce the intermediate drawable object
    setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}


Answer 2:

其实,你可以看到其中的差别,如果你有时会使用null作为参数:

imageView.setImageDrawable(null);
Drawable d = imageView.getDrawable(); // d == null

imageView.setImageBitmap(null);
Drawable d = imageView.getDrawable(); // d == some BitmapDrawable, != null

所以如果你是在检查可抽拉的存在ImageView ,提防它。



Answer 3:

我只是写了一篇文章给这个。 希望能够回答你的问题。

https://plus.google.com/112740367348600290235/posts/VNAfFLDcKrw

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

  1. setImageDrawable(可绘制可绘制的)
  2. setImageBitmap(位图BM)
  3. setImageResource(INT居民)
  4. setImageURI(URI URI)

ImageView ,由名称,用于显示图像。 但究竟什么是形象? 一个Bitmap是-一个图像,也就不难理解,我们用setImageBitmap用于这一目的。 但是,在内部, ImageView有-一个Drawable ,但不是一个Bitmap ,这是什么setImageDrawable的。 当你调用setImageBitmap ,在内部,首先将位图被包裹BitmapDrawable ,这是-A Drawable ,然后调用setImageDrawable

下面是代码。

public void setImageBitmap(Bitmap bm) {
    setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}

那么,怎么样3和4 API?

你应该已经知道,是的方式来创建位图串:从一个文件路径,从输入流,从开放的,还是从资源文件。

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的图像显示。

除了设置Drawable通过Java API,你也可以使用XML属性设置源DrawableImageView 。 参见下面的例子。 注意,形状可以是任意的图像文件(.PNG,.JPG,.BMP)或XML文件。



Answer 4:

这两种方法是有效的,达到同样的效果。 在第一种方法你环绕的可绘制对象,它是任何可以在视图中绘制的抽象您的位图。

约绘项目的特别之处是,他们让你做各种操作的图形对象,他们环绕在(缩放,平移,不透明度等)。

位图是一种可绘制的,您可以进一步了解可绘制在这里: http://developer.android.com/guide/topics/resources/drawable-resource.html

在第二种方法,您可以直接访问位图位没有任何可绘制相关的操作和简单的绘制位图,是对你的看法。

希望这可以帮助,欢呼声,马克斯。



Answer 5:

public void setImageBitmap(Bitmap bm) {
// if this is used frequently, may handle bitmaps explicitly
// to reduce the intermediate drawable object
setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}

也许不同的是mContext.getResources(),从mContext.getResources()可以得到divice的密度,等等sceen显示是不同



文章来源: Android - ImageView: setImageBitmap VS setImageDrawable