即使使用来自上下文的资源,BitmapFactory.decodeResource也会返回null

时间:2016-07-18 07:23:16

标签: android android-view android-drawable android-bitmap

我检查了所有其他类似的问题,没有人帮助过我。以下是获取bitmap的代码:

public class HachureView extends View {

  //...

    @Override
    protected void onDraw(Canvas canvas) {

       //...
       bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.hachure);
       bitmap.prepareToDraw();
       canvas.drawBitmap(bitmap, 0, 0, mPaint);
    }
}

这是hachure.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/hacure3"
    android:tileModeY="repeat" />

和hacure3是png文件夹中的drawable文件。

问题是decodeResource始终返回null。

根据this使用来自context.getResource()的资源的问题解决了问题。但它对我没用。

此外,我已尝试this并清理了该项目,但它再次无效。

我刚发现了一个技巧here。虽然它可以正常工作,但这不是我的问题的答案,这就是为什么decodeResource()返回null:

Drawable drawable = getResources().getDrawable(resId);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

注1 :我已将hacure3.png替换为其他png个文件以及一些材料设计图标,但没有任何更改。

注2:hacure.xml打开时,android studio中的预览窗口会正确显示图像。

3 个答案:

答案 0 :(得分:0)

代替使用位图xml作为资源,您可以通过将png图像作为资源传递来直接访问png作为位图,例如:

bitmap = BitmapFactory.decodeResource(getContext()。getResources(),R.drawable.hacure3);

答案 1 :(得分:0)

我有同样的问题。原因是Android Studio - 刚刚组装糟糕的APK,资源类损坏。清洁/重建可能会有所帮助。

答案 2 :(得分:0)

这解决了我的问题。

我试图将图像文件(png,jpg)从 drawable-v24 移至 drawable