尝试在空对象引用上调用虚拟方法 'boolean android.graphics.Bitmap.isRecycled()'



R.drawable.diamond是一个.xml文件,我收到了这个错误。如果我用.png文件替换它,我不会得到任何错误。所以也许我使用了错误的命令。

R.drawable.d菱形.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="100dp" android:width="70dp"
android:viewportHeight="100" android:viewportWidth="100">
<path
android:fillColor="#FF5722"
android:pathData="M 5,5 95,5 95,95 5,95 z"
android:strokeAlpha="1"
android:strokeColor="#FFFFFF"
android:strokeLineCap="butt"
android:strokeLineJoin="round"
android:strokeWidth="4"/>
<path
android:fillColor="#8BC34A"
android:pathData="m 50,30 l 20,20 -20,20 -20,-20 z"
android:strokeAlpha="1"
android:strokeColor="#FFFFFF"
android:strokeLineCap="butt"
android:strokeLineJoin="round"
android:strokeWidth="4"/>
</vector>

GameView.java

public class GameView extends View {
private final Bitmap diamond;
private Paint paint = new Paint();
private Canvas canvas = new Canvas();
public GameView(Context context) {
super(context);
diamond = BitmapFactory.decodeResource(getResources(),R.drawable.diamond);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(diamond,0,0,null);
}
}

矢量没有与其关联的位图。这是错误的主要原因

但如果你仍然想实现这一点,你可以这样做来获得位图

private Bitmap getBitmapFromVector(Context context, int vectorDrawableRes) {
Drawable drawable = context.getResources().getDrawable(vectorDrawableRes);
Canvas canvas = new Canvas();
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
drawable.draw(canvas);
return bitmap;
}

这里有一个例子:

Bitmap drawableBitmap = getBitmapFromVector(context, R.drawable.diamond);

相关内容

最新更新