Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓SurfaceView显示黑屏_Android_Surfaceview - Fatal编程技术网

Android 安卓SurfaceView显示黑屏

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布局:

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