从表面视图中删除图形

时间:2015-12-14 09:55:58

标签: android canvas drawing

每次使用此代码触摸屏幕时,我都会在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。

1 个答案:

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