Alexander_Kolmachikhin
@Alexander_Kolmachikhin
Android Programming

Почему я получаю null после BitmapFactory.decodeResource(getResources(), R.drawable.ic_shild)?

Мой код:
MainActivity
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new DrawView(this));
    }

DrawView
public class DrawView extends View {
    // Здесь я получаю null
    private Bitmap img  = BitmapFactory.decodeResource(getResources(), R.drawable.ic_shild);

    public DrawView(Context context){
        super(context);
    }

    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);

        canvas.drawBitmap(img, 100, 100, null);
    }
}


Моя проблема в том, что я получаю null вместо картики на экране. Как это исправить?

Вот полный тект, ошибки:
10-27 22:22:15.536 2863-2863/k.alexander.canvas_learn E/AndroidRuntime: FATAL EXCEPTION: main
    Process: k.alexander.canvas_learn, PID: 2863
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference
        at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1281)
        at android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:579)
        at k.alexander.canvas_learn.DrawView.onDraw(DrawView.java:22)
        at android.view.View.draw(View.java:15239)
        at android.view.View.updateDisplayListIfDirty(View.java:14175)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.View.draw(View.java:14967)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3203)
        at android.view.View.updateDisplayListIfDirty(View.java:14170)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.View.draw(View.java:14967)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3203)
        at android.view.View.updateDisplayListIfDirty(View.java:14170)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.View.draw(View.java:14967)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3203)
        at android.view.View.updateDisplayListIfDirty(View.java:14170)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.View.draw(View.java:14967)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3203)
        at android.view.View.updateDisplayListIfDirty(View.java:14170)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.View.draw(View.java:14967)
        at android.view.ViewGroup.drawChild(ViewGroup.java:3410)
        at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3203)
        at android.view.View.draw(View.java:15242)
        at android.widget.FrameLayout.draw(FrameLayout.java:598)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2658)
        at android.view.View.updateDisplayListIfDirty(View.java:14175)
        at android.view.View.getDisplayList(View.java:14197)
        at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273)
        at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279)
        at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318)
        at android.view.ViewRootImpl.draw(ViewRootImpl.java:2536)
        at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5891)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
        at android.view.Choreographer.doCallbacks(Choreographer.java:580)
        at android.view.Choreographer.doFrame(Choreographer.java:550)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5298)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)


P.S. Подскажите еще на что стоит сделать упор в изучении, чтобы таких глупых впросов не задавать)
  • Вопрос задан
  • 471 просмотр
Решения вопроса 1
Alexander_Kolmachikhin
@Alexander_Kolmachikhin Автор вопроса
Android Programming
Ответ не нашел, но нашел решение: попробовал использовать свои нарисованные вектора, а не системные, которые предлогает AS. Хотя почему вектора AS'a не работают все равно не понятно...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы