在surfaceview上多次绘制位图

时间:2013-08-11 16:58:05

标签: java android surfaceview

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

主题类:

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

要清楚:我想绘制一个圆圈,并在我点击屏幕的任何地方显示它。它没有这样做。你能说出为什么在这段代码中就是这种情况吗?

1 个答案:

答案 0 :(得分:2)

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