Java 用手指画圆

Java 用手指画圆,java,android,Java,Android,我希望在我的android程序中实现移动已经创建的onDraw圆圈的功能。这是我的,我希望能够移动屏幕上的触摸每个圆圈。下面是我当前绘制圆和网格的CustomView类。我知道我需要一个onTouch监听器添加到这个类中,但是我有点困惑,在添加监听器之后该怎么做 public class CustomView extends View { // private fields that are necessary for rendering the view p

我希望在我的android程序中实现移动已经创建的
onDraw
圆圈的功能。这是我的,我希望能够移动屏幕上的触摸每个圆圈。下面是我当前绘制圆和网格的CustomView类。我知道我需要一个
onTouch
监听器添加到这个类中,但是我有点困惑,在添加监听器之后该怎么做

public class CustomView extends View {

    // private  fields  that    are necessary   for rendering   the view
    private boolean touches[]; //   which   fingers providing   input
    private float touchx[]; //  x   position    of  each    touch
    private float touchy[]; //  y   position    of  each    touch
    private int first; //   the first   touch   to  be  rendered
    private boolean touch; //   do  we  have    at  least   on

    private static final int DEFAULT_PAINT_COLOR = Color.WHITE;
    private static final int DEFAULT_NUMBER_OF_ROWS = 8;
    private static final int DEFAULT_NUMBER_OF_COLUMNS = 8;

    private int numRows = DEFAULT_NUMBER_OF_ROWS, numColumns = DEFAULT_NUMBER_OF_COLUMNS;

    public CustomView(Context context) {
        super(context);

    }

    public CustomView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    public CustomView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    public boolean onTouchEvent(MotionEvent event)  {

        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas canvas) {


    super.onDraw(canvas);
    Paint redPaint = new Paint();
    redPaint.setColor(Color.RED);
    Paint blackPaint = new Paint();
    blackPaint.setColor(Color.BLACK);
    redPaint.setStrokeWidth(10);

    int width = getMeasuredWidth();
    int height = getMeasuredHeight();

    canvas.drawLine(0, 0, getMeasuredWidth(), 0, redPaint);
    canvas.drawLine(getMeasuredWidth(), 0, getMeasuredWidth(), getMeasuredHeight(), redPaint);
    canvas.drawLine(getMeasuredWidth(), getMeasuredHeight(), 0, getMeasuredHeight(), redPaint);
    canvas.drawLine(0, getMeasuredHeight(), 0, 0, redPaint);


    for (int i = 1; i < numColumns; i++) {
        canvas.drawLine(width * i / numColumns, 0, width * i / numColumns, height, redPaint);
    }

    // Horizontal lines
    for (int i = 1; i < numRows; i++) {
        canvas.drawLine(0, height * i / numRows, width, height * i / numRows, redPaint);
    }


    canvas.drawCircle(60, 220, 40, blackPaint);
    canvas.drawCircle(190, 220, 40, blackPaint);
    canvas.drawCircle(320, 220, 40, blackPaint);
    canvas.drawCircle(450, 220, 40, blackPaint);
    canvas.drawCircle(580, 220, 40, blackPaint);
    canvas.drawCircle(710, 220, 40, blackPaint);
    canvas.drawCircle(840, 220, 40, blackPaint);
    canvas.drawCircle(970, 220, 40, blackPaint);


    canvas.drawCircle(60, 70, 40, blackPaint);
    canvas.drawCircle(190, 70, 40, blackPaint);
    canvas.drawCircle(320, 70, 40, blackPaint);
    canvas.drawCircle(450, 70, 40, blackPaint);
    canvas.drawCircle(580, 70, 40, blackPaint);
    canvas.drawCircle(710, 70, 40, blackPaint);
    canvas.drawCircle(840, 70, 40, blackPaint);
    canvas.drawCircle(970, 70, 40, blackPaint);

    canvas.drawCircle(60, 980, 40, blackPaint);
    canvas.drawCircle(190, 980, 40, blackPaint);
    canvas.drawCircle(320, 980, 40, blackPaint);
    canvas.drawCircle(450, 980, 40, blackPaint);
    canvas.drawCircle(580, 980, 40, blackPaint);
    canvas.drawCircle(710, 980, 40, blackPaint);
    canvas.drawCircle(840, 980, 40, blackPaint);
    canvas.drawCircle(970, 980, 40, blackPaint);

    canvas.drawCircle(60, 1130, 40, blackPaint);
    canvas.drawCircle(190, 1130, 40, blackPaint);
    canvas.drawCircle(320, 1130, 40, blackPaint);
    canvas.drawCircle(450, 1130, 40, blackPaint);
    canvas.drawCircle(580, 1130, 40, blackPaint);
    canvas.drawCircle(710, 1130, 40, blackPaint);
    canvas.drawCircle(840, 1130, 40, blackPaint);
    canvas.drawCircle(970, 1130, 40, blackPaint);

  }
}
公共类CustomView扩展了视图{
//渲染视图所需的专用字段
私有布尔触摸[];//哪些手指提供输入
私有浮动触摸x[];//每个触摸的x位置
private float touchy[];//每次触摸的y位置
private int first;//要渲染的第一个触摸
private boolean touch;//我们是否至少有
私有静态最终int默认值_PAINT_COLOR=COLOR.WHITE;
私有静态final int默认行数=8;
私有静态final int默认列数=8;
private int numRows=行的默认数量,numColumns=列的默认数量;
公共自定义视图(上下文){
超级(上下文);
}
公共自定义视图(上下文、属性集属性){
超级(上下文,attrs);
}
公共自定义视图(上下文上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
}
公共布尔onTouchEvent(运动事件){
返回super.onTouchEvent(事件);
}
@凌驾
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆红色油漆=新油漆();
redPaint.setColor(Color.RED);
油漆黑色油漆=新油漆();
黑色油漆。设置颜色(颜色。黑色);
红漆。设定行程宽度(10);
int width=getMeasuredWidth();
int height=getMeasuredHeight();
绘制线(0,0,getMeasuredWidth(),0,redPaint);
绘制线(getMeasuredWidth(),0,getMeasuredWidth(),getMeasuredHeight(),redPaint);
绘制线(getMeasuredWidth(),getMeasuredHeight(),0,getMeasuredHeight(),redPaint);
drawLine(0,getMeasuredHeight(),0,0,redPaint);
对于(int i=1;i
。检测触摸是否发生在圆圈内,然后执行所需操作。通过调用invalidate刷新viewformatting更改,使用新坐标重新绘制圆环