2015-11-05 17 views
1

試圖添加一個簡單的背景到我的表面視圖,但這些似乎是drawBitmap的問題。我遵循YouTube教程,他做了所有相同的事情,除了我自己繪製的XML佈局文件,因爲他沒有顯示他的,所以我想這個問題可能在於simple.xml文件。Android畫布drawBitmap拋出空指針異常

錯誤

com.example.adam.hilo E/AndroidRuntime: FATAL EXCEPTION: Thread-2096 
com.example.adam.hilo E/AndroidRuntime: Process: com.example.adam.hilo, PID: 19788 
com.example.adam.hilo E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null object reference 
com.example.adam.hilo E/AndroidRuntime: at android.graphics.Canvas.throwIfCannotDraw(Canvas.java:1281) 
com.example.adam.hilo E/AndroidRuntime: at android.graphics.Canvas.drawBitmap(Canvas.java:1337) 
com.example.adam.hilo E/AndroidRuntime: at com.example.adam.hilo.Activity_Staircase_Layout.run(Activity_Staircase_Layout.java:36) 
com.example.adam.hilo E/AndroidRuntime: at java.lang.Thread.run(Thread.java:818) 

Activity_Staircase_Layout

public class Activity_Staircase_Layout extends SurfaceView implements Runnable { 

    Thread thread = null; 
    boolean can_draw; 

    Bitmap background; 
    Canvas canvas; 
    SurfaceHolder surface_holder; 

    public Activity_Staircase_Layout(Context context) { 
     super(context); 
     surface_holder = getHolder(); 
     background = BitmapFactory.decodeResource(getResources(), R.drawable.simple); 
    } 

    @Override 
    public void run() { 
     while(can_draw) { 
      if(!surface_holder.getSurface().isValid()) { 
       continue; 
      } 

      canvas = surface_holder.lockCanvas(); 
      canvas.drawBitmap(background,0,0,null); 
      surface_holder.unlockCanvasAndPost(canvas); 
     } 
    } 

    public void pause() { 
     can_draw = false; 

     while(true) { 
      try { 
       thread.join(); 
       break; 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

     thread = null; 
    } 

    public void resume() { 
     can_draw = true; 
     thread = new Thread(this); 
     thread.start(); 
    } 
} 

抽拉/ Simple.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <!-- Specify a semi-transparent solid green background color --> 
    <solid android:color="#5500FF66" /> 

    <!-- Specify a dark green border --> 
    <stroke 
     android:width="5dp" 
     android:color="#009933" /> 
</shape> 

StaircaseActivity.java

public class StaircaseActivity extends AppCompatActivity { 

    Activity_Staircase_Layout staircase_LayoutView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     staircase_LayoutView = new Activity_Staircase_Layout(this); 
     setContentView(staircase_LayoutView); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     staircase_LayoutView.pause(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     staircase_LayoutView.resume(); 
    } 

} 

回答

0

這裏的問題是background位圖的行空:canvas.drawBitmap(background,0,0,null);

確保background位不爲空,當你調用drawBitmap方法。

執行以下確認這一個:

if(background != null){ 
     canvas.drawBitmap(background,0,0,null); 
    } else { 
     Log.d("DEBUG","background is null"); 
    }