从位图创建drawable

时间:2014-04-15 04:55:05

标签: android bitmap drawable

ALL,

根据建议here我需要从我的位图中绘制出一个可绘制的。但是当我尝试使用时:

 Drawable d = new Drawable( my_bmp);

它表明不推荐使用此构造函数,而不是:

 Drawable(Bitmap bmp, int resourceId)

我怎么能用位图制作一个可绘制的?

谢谢。

6 个答案:

答案 0 :(得分:23)

您可以使用

Drawable d = new BitmapDrawable(getResources(), my_bmp);
  

包装位图的Drawable,可以平铺,拉伸或   对齐。您可以从文件路径(输入)创建BitmapDrawable   流,通过XML膨胀,或从Bitmap对象。

BitmapDrawable(Resources res, Bitmap bitmap)

  

从位图创建drawable,基于设置初始目标密度   显示资源的指标。

另请参阅公共构造函数@

http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html

答案 1 :(得分:3)

尝试将Bitmap加载为Bitmap Drawable

如下所示创建ImgDrawableFromFile(Resources res, String file_name)

Drawable d = null;

    public Drawable ImgDrawableFromFile(Resources res, String file_name) {

        myBitmap = null;
        File imgFile = new File(
                "/data/data/yourpkgname/app_my_sub_dir/images/" + file_name);
        if (imgFile.exists()) {

            myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

            if (myBitmap != null) {
                d = new BitmapDrawable(res, myBitmap);
                return d;
            } else {
                return null;
            }
        }
        return null;

    }

现在称这个函数为

img.setBackgroundDrawable(ImgDrawableFromFile(getResources(), "1.jpg")); // pass your saved file name as second argument 

答案 2 :(得分:3)

派对有点晚,但我看到了一个明显的误解。提供的答案确实是正确的:

Drawable d = new BitmapDrawable(getResources(),bitmap);

在这种情况下,getResources()ContextActivity中可用的方法,仅用于查找屏幕密度并相应地调整Drawable。

所以Igor,即使你从云端加载图像,你仍然可以调用getResources()。

快乐编码

答案 3 :(得分:2)

BitmapDrawable(Bitmap bitmap)构造函数已为deprecated

你可以使用

Drawable drawable = new BitmapDrawable(getResources(), bitmap);

source

答案 4 :(得分:0)

您可以使用BitmapDrawable类从位图获取Drawable

Bitmap Drawable参考

答案 5 :(得分:0)

如果Mauro Banze迟到了,那么我真的不知道我在这里做什么。但对于那些迫切寻找解决方案的人来说,这就是我所做的:

在将项目从JavaFX引入Android时,我偶然发现了同样的问题。我想重用我的大部分数据"只管理和提供我的数据并且对UI没有影响的类。

足够讲故事,我们走了:

问题:

  • 在某些时候,我们需要Drawable才能在屏幕上显示位图。
  • 我们希望下载(从云端,互联网或任何地方)此位图并将其保存以供以后用作Drawable
  • 我们无法在非Context或非Activity课程中执行此操作,因为我们需要Resources

那么为什么我们不将它保存为Bitmap直到我们需要它被绘制(这肯定会在ContextActivity类中发生)。

我创建了一个名为BitmapImage的类。它看起来像这样:

public class BitmapImage {

private final Bitmap bitmap;

public BitmapImage (Bitmap bitmap) {
    this.bitmap = bitmap;
}


public Bitmap getBitmap() {
    return bitmap;
}

public Drawable getDrawable(Resources res) {
    return new BitmapDrawable(res,getBitmap());
}

这个非常简单的课程"保存"位图。因此,而不是使用DrawableBitmapImage合作,直到您真的迫切需要Drawable

此时,您应该在ActivityContext,并且可以在那里拨打Drawable foo = anyBitmapImage.getDrawable(getResource())