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

问题描述 投票:0回答:1

我得到的错误是R.drawable.diamond,它是.xml文件。如果将其替换为.png文件,则不会出现任何错误。所以也许我使用了错误的命令。

R.drawable.diamond.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);
    }

}
android android-canvas
1个回答
0
投票

Vector没有与之关联的位图。这是错误的主要原因

但是如果您仍然想实现此目标,则可以这样做以获得位图

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(R.drawable.diamond);
© www.soinside.com 2019 - 2024. All rights reserved.