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();
}
}