【发布时间】:2015-11-05 18:50:52
【问题描述】:
尝试向我的表面视图添加简单的背景,但 drawBitmap 似乎存在问题。我正在关注 youtube 教程,除了我制作了自己的可绘制 xml 布局文件之外,他所做的一切都是一样的,因为他没有显示他的,所以我认为问题可能出在 simple.xml 文件中。
错误
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();
}
}
【问题讨论】:
标签: java android xml android-canvas surfaceview