0

我只是想在我触摸屏幕的地方画一个圆圈。当我触摸屏幕时,会在那里画一个圆圈,但是当我在其他地方触摸屏幕时会画一个新圆圈(旧的圆圈应该出现在那里,而不是新的圆圈)。有谁明白为什么会这样?代码:

线程类:

public class GameThread extends Thread{
    private SurfaceHolder sHolder;
    private DrawingSurface dSurface;

    private boolean okToRun;

    Paint redPaint = new Paint();

    public int x, y;

    boolean myTouchEvent(MotionEvent event){
        int touch = event.getAction();
        switch(touch){
            case MotionEvent.ACTION_DOWN:
            x = (int) event.getX();
            y = (int) event.getY();
        }
        return true;
    }

    public GameThread(SurfaceHolder holder, DrawingSurface surface){
        sHolder = holder;
        dSurface = surface;
        redPaint.setARGB(255, 255, 0, 0);
    }//GameThread()

    public void setOkToRun(boolean status){
        okToRun = status;
    }//setOkToRun()

    public void run(){
        while(okToRun){//gameloop
            Canvas canvas = null;
            try{
                canvas = sHolder.lockCanvas(null);
                synchronized(sHolder){
                    try{
                        canvas.drawCircle(x, y, 60, redPaint);
                    } catch (Exception e){
                    }
                }
                } finally {
                if (canvas != null) {
                    sHolder.unlockCanvasAndPost(canvas);
                }
            }
        }
    }//run()
}

以下是我的surfaceview类的相关方法:

@Override
public boolean onTouchEvent(MotionEvent event) {
    return drawingThread.onTouchEvent(event);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
        drawingThread = new GameThread(getHolder(), this);
        drawingThread.start();
        drawingThread.setOkToRun(true);
}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    radius += 10;
    drawingThread.setOkToRun(false);
    try {
        drawingThread.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

要清楚:我想画一个圆圈,让它出现在我点击屏幕的任何地方。它不这样做。你能说出为什么在这段代码中会出现这种情况吗?

4

1 回答 1

2

我希望我是对的,您需要在触摸屏幕的地方画一个圆圈,问题是以前触摸的圆圈仍然出现在屏幕上。在这种情况下,问题是您在画布上绘制圆圈而不清除它。画布在内存中表示为数组。当您调用 Canvas.drawCircle() 时,部分内存被圆形图像重写。当您重复执行此操作时,画布会包含更多正在屏幕上绘制的圆圈。在绘制新圆圈之前,您需要重新绘制整个画布。可以通过在调用Canvas.drawCircle()方法之前调用 Canvas.drawColor() 方法来完成。它用选定的颜色清除整个画布。

于 2013-08-11T20:56:07.270 回答