Попытка вызвать виртуальный метод 'boolean android .graphics.Bitmap.isRecycled ()' для пустой ссылки на объект - PullRequest
0 голосов
/ 13 апреля 2020

Я получаю эту ошибку с 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);
    }

}

1 Ответ

1 голос
/ 13 апреля 2020

С вектором не связано растровое изображение. Это основная причина ошибки

Но если вы все же хотите этого добиться, вы можете сделать вот так, чтобы получить Растровое изображение

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...