每次使用此代码触摸屏幕时,我都会在surfaceview中绘制一个圆圈。
Surface = (SurfaceView) findViewById(R.id.surface);
surfaceHolder = Surface.getHolder();
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setColor(Color.WHITE);
Surface.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
int mX = (int) (event.getX());
int mY = (int) (event.getY());
if (surfaceHolder.getSurface().isValid()) {
canvas = surfaceHolder.lockCanvas();
circlePoints.add(new Point(mX, mY);
for (Point p : circlePoints) {
canvas.drawCircle(p.x, p.y, 40, paint);
}
surfaceHolder.unlockCanvasAndPost(canvas);
}
break;
}
return true;
}
});
现在,我想使用此代码点击清除按钮清除表面视图:
Button Clear = (Button) findViewById(R.id.clear);
Clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (surfaceHolder.getSurface().isValid()) {
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
//canvas.drawColor(Color.BLACK);
surfaceHolder.unlockCanvasAndPost(canvas);
}
circlePoints.clear();
}
});
表面视图上的所有现有圆圈都会消失,但当我再次触摸屏幕以绘制其他圆圈时,会出现旧圆圈。 我找不到任何解释为什么它们再次出现。 感谢您给我另一个解决方案来清除我的Surfaceview。
答案 0 :(得分:0)
您可以简单地为整个Canvas
着色。例如,假设您的初始Canvas
颜色为White
,则可以执行此操作:
canvas.drawColor(Color.WHITE);
Color
取自此课程android.graphics.Color
修改强>
您的onClick
代码似乎正常,但它一次只删除一个圈子,因为在ACTION_DOWN
我们每次都在新画布上绘制圆圈。同样地删除我们在画布上绘制的所有圆圈的次数与圆圈的数量相同。
因此,您应该像这样更改onClick
:
Clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (surfaceHolder.getSurface().isValid()) {
for(Point p : circlePoints) {
canvas = surfaceHolder.lockCanvas();
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
surfaceHolder.unlockCanvasAndPost(canvas);
}
circlePoints.clear();
}
}
});