Android: 在 SurfaceView 上绘制圆圈时,所有其他圆圈都会改变位置
Android: When drawing circles on SurfaceView all other circles change positions
我正在尝试在 SurfaceView 上绘制圆圈。
每次添加一个新圆时,其他圆似乎会交换 X 和 Y 坐标。
这是 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 坐标。从左到右在一条水平线上进行一系列触摸,每次触摸时您应该会看到交替的圆圈亮起。
我正在尝试在 SurfaceView 上绘制圆圈。
每次添加一个新圆时,其他圆似乎会交换 X 和 Y 坐标。
这是 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 坐标。从左到右在一条水平线上进行一系列触摸,每次触摸时您应该会看到交替的圆圈亮起。