每次触摸屏幕时如何绘制新圆圈?

use*_*877 2 java geometry android touch-event ondraw

我希望程序在触摸屏幕时绘制一个圆圈,如果屏幕被触摸到另一个位置,我希望程序再次绘制一个圆圈但不删除旧的圆圈!

现在我的问题是,它不仅仅是绘制一个新的圆圈.它绘制一个新的圆圈并删除旧圆圈.我试图找到一个解决方案,但没有任何效果.

那么有人可以帮助我吗?

所以它现在正在运作!

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.PointF;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.MotionEvent;
import android.view.View;

public class SingleTouchEventView extends View {
  private Paint paint = new Paint();
  List<Point> points = new ArrayList<Point>();


  public SingleTouchEventView(Context context, AttributeSet attrs) {
    super(context, attrs);}

  protected void onDraw(Canvas canvas){
      super.onDraw(canvas);
      paint.setColor(Color.GREEN);
      for(Point p: points){
           canvas.drawCircle(p.x, p.y, 20, paint);
      }
      invalidate();
    }

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:

        Point p = new Point();
         p.x = (int)event.getX();
        p.y = (int)event.getY();
        points.add(p);
        invalidate();

    case MotionEvent.ACTION_MOVE:  // a pointer was moved
    case MotionEvent.ACTION_UP:
    case MotionEvent.ACTION_CANCEL: {
      break;
    }
    }
    invalidate();
    return true;  

}




}
Run Code Online (Sandbox Code Playgroud)

Adi*_*kar 7

您可以通过将点列表维护为私有实例变量来实现它:

private List<Point> points = new ArrayList<Point>;
Run Code Online (Sandbox Code Playgroud)

然后,每次发生新的触摸事件时,您都可以向此列表添加新点:

Point p = new Point();
p.x = event.getX();
p.y = event.getY();
points.add(p);
invalidate();
Run Code Online (Sandbox Code Playgroud)

现在在onDraw()方法中,您可以打印列表中的所有点:

paint.setColor(Color.GREEN);
for(Point point: points){
     canvas.drawCircle(point.x, point.y, 20, paint);
}
invalidate();
Run Code Online (Sandbox Code Playgroud)