我只想在触摸屏幕的地方画一个圆圈。当我触摸屏幕时,会在那里绘制一个圆圈,但是当我在其他地方触摸屏幕时,会绘制一个新圆圈(旧圆圈应该出现在那里,而不是新圆圈)。有谁知道为什么会这样?代码:
主题类:
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();
}
}
要清楚:我想绘制一个圆圈,并在我点击屏幕的任何地方显示它。它没有这样做。你能说出为什么在这段代码中就是这种情况吗?
答案 0 :(得分:2)
我希望我是对的,你需要在触摸屏幕的地方画一个圆圈,问题是之前触摸的圆圈仍然出现在屏幕上。 在这种情况下,问题是,您在画布上绘制圆圈而不清除它。 Canvas在内存中表示为数组。当你调用Canvas.drawCircle()时,部分内存会被圆形图像重写。重复执行此操作时,画布将包含更多正在屏幕上绘制的圆圈。在绘制新圆之前,需要重新绘制整个画布。可以在调用方法Canvas.drawCircle()之前调用方法Canvas.drawColor()来完成。它用选定的颜色清除整个画布。