Android: 在 SurfaceView 上绘制圆圈时,所有其他圆圈都会改变位置

Android: When drawing circles on SurfaceView all other circles change positions

我正在尝试在 SurfaceView 上绘制圆圈。
每次添加一个新圆时,其他圆似乎会交换 XY 坐标。
这是 MyCanvas class extends SurfaceView

public class MyCanvas extends SurfaceView{

private final SurfaceHolder surfaceHolder;
private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

public MyCanvas(Context context) {
    super(context);
    surfaceHolder = getHolder();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN) {

        Canvas canvas = surfaceHolder.lockCanvas();
        if(surfaceHolder.getSurface().isValid()){

            paint.setStyle(Paint.Style.FILL_AND_STROKE);

                paint.setStrokeWidth(0);
                paint.setColor(Color.GREEN);
                canvas.drawCircle(event.getX(), event.getY(), 50, paint);

            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }
    return false;
}

并链接到 Activity

    surface = (LinearLayout) findViewById(R.id.surface);
    myCanvas = new MyCanvas(this);
    myCanvas.setZOrderOnTop(true);
    myCanvas.getHolder().setFormat(PixelFormat.TRANSLUCENT);
    surface.addView(myCanvas);

您没有清除 Canvas 每一帧,这是 lockCanvas() 所要求的。您看到的东西 "move" 因为表面是双缓冲或三缓冲的,所以您看到的是备用缓冲区的先前内容。

没有机制可以使绘制的像素交换 X/Y 坐标。从左到右在一条水平线上进行一系列触摸,每次触摸时您应该会看到交替的圆圈亮起。