Android 安卓SurfaceView显示黑屏
我试图画一个表面视图,但我得到了一个黑屏。我的xml布局:Android 安卓SurfaceView显示黑屏,android,surfaceview,Android,Surfaceview,我试图画一个表面视图,但我得到了一个黑屏。我的xml布局: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.example
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<com.example.surfaceview.MySurface android:id="@+id/padview"
android:layout_width="match_parent" android:layout_height="match_parent" />
</FrameLayout>
}
该代码基于谷歌的月球陆地表面视图示例,位于
我知道所有的代码都是通过日志获取的。更改绘图功能 背景色:setColor(颜色:红色); drawRect(新的Rect(10,10,100,100),背景)
(有颜色和矩形的测试值)更改绘图功能 背景色:setColor(颜色:红色); drawRect(新的Rect(10,10,100,100),背景)
(有颜色和rect的测试值)已经修复,问题是我必须从提供的上下文而不是R加载颜色。因此,我必须使用
background.setColor(R.color.white)
,而不是background.setColor(context.getResources().getColor(R.color.white))
。已经修复,问题是我必须从提供的上下文而不是R加载颜色。因此,我必须使用background.setColor(R.color.white)
,而不是background.setColor(context.getResources().getColor(R.color.white)
。
public DrawingThread thread;
public MySurface(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder surfaceholder = getHolder();
surfaceholder.addCallback(this);
thread = new DrawingThread(surfaceholder, context, new Handler() {
@Override
public void handleMessage(Message m) {
// Do some handle thing
}
});
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder tholder, int format, int width, int height) {
thread.setSurfaceSize(width, height);
thread.holder = tholder;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.running = true;
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
thread.running = false;
while(retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
public Thread getThread() {
return thread;
}
public class DrawingThread extends Thread {
private SurfaceHolder holder;
private Context context;
private Handler handle;
private Paint background;
private Rect blank;
public boolean running;
public boolean created;
public int canvasheight;
public int canvaswidth;
public PadThread(SurfaceHolder tholder, Context tcontext, Handler thandler) {
holder = tholder;
context = tcontext;
handle = thandler;
// Temporary canvas dimentions
canvaswidth = 1;
canvasheight = 1;
running = false;
created = false;
background = new Paint();
background.setColor(R.color.white);
blank = new Rect(0, 0, canvaswidth, canvasheight);
}
@Override
public void run() {
Log.d("SurfaceView Test", "Drawing thread run");
while(running) {
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
synchronized(holder) {
// update object states
// get user input gestures
drawing(canvas);
}
} finally {
if(canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
}
private void drawing(Canvas canvas) {
// Clear screen
canvas.drawRect(blank, background);
// Draw Things
}
public void setSurfaceSize(int width, int height) {
synchronized(holder) {
canvaswidth = width;
canvasheight = height;
// New background rect
blank.set(0, 0, canvaswidth, canvasheight);
}
}
}