我检查了所有其他类似的问题,没有人帮助过我。以下是获取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中的预览窗口会正确显示图像。
答案 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