Ошибка при onDraw на холсте с BitmapFactory - PullRequest
0 голосов
/ 05 мая 2019

Я хотел нарисовать изображение на холсте, используя bitmapFactory, но это дало мне ошибку.

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference
        at android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:54)
        at android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:226)
        at android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:78)
        at com.example.canvastest.GameView.onDraw(GameView.java:23)

Я пытался заменить нулевую краску реальным объектом рисования, но это не помогло.
Iтакже пытался использовать Rect для пространства, но это тоже не хорошо.

    private Bitmap bmp;
    public GameView(Context context) {
        super(context);
        bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawColor(Color.BLUE);
        canvas.drawBitmap(bmp, 10, 10, null);
    }

1 Ответ

0 голосов
/ 05 мая 2019

Попробуйте создать метод init (Context context) , например:

public void init(Context context) {
    this.context = context;
    bmp = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
}

Тогда:

public GameView(Context context) {
    super(context);
    init(context);
}

public GameView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

public GameView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init(context);
}

public GameView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
    init(context);
}
...