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

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

Войти через центр авторизации
Похожие вопросы