你可以有两个变量 x 和 y,然后每次触摸屏幕时将 x 和 y 设置为该值,同时绘制坐标 x 和 y 的圆。
如果您正在绘图并且只想保留一个绘制的圆圈,您可以绘制圆圈并将其添加到画布中的 x 和 y 上,然后下次触摸屏幕时,将在 x 和 y 上绘制一个新的圆圈y 和旧的将保持绘制状态。
你在使用Canvas 吗?如果是这样,您可以了解如何做到这一点here (Canvas documentation) 和here (Bitmap documentation)。根据您的情况,您可以创建一个新的Bitmap 并将其分配给Canvas,然后在Canvas 上绘制,在您的位图中,您将拥有所需的圆圈和其他形状,在下一个绘图框架上,绘制新形状并更改将保留。
编辑:为了使动态半径遵循此逻辑,当您触摸屏幕时,将 x 和 y 设置为该点(圆心),同时在屏幕上移动手指,计算与 x 比较的半径和 y,当你抬起手指时,如上所述在位图上应用绘图。
一些代码:
public boolean onTouchEvent(MotionEvent e)
{
switch (e.getAction())
{
case MotionEvent.ACTION_DOWN:
x = (int) event.getX();
y = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
//If I'm not wrong this is how to calculate radius,
//I'm at work and can't test this now, you can use your way
int distanceX = (int) event.getX() -x;
int distanceY = (int) event.getY() -y;
radius = sqrt(distanceX *distanceX + distanceY *distanceY);
break;
case MotionEvent.ACTION_UP:
//Draw circle inside your bitmap here
//This is like a flag to notify the program that no new shape is being drawn
x = -1;
break;
}
public void draw(Canvas canvas)
{
canvas.drawBitmap(myBitmap, 0, 0, null);
//A new shape is being drawn
if (x != -1)
//In here you place a switch to decide which shape you are drawing
//for this example i assume circle
canvas.drawCircle(radius, x, y, paint);
}
当您抬起手指时,应该在位图上绘制新圆圈,这样您就不必为每个新圆圈添加额外的代码。
Edit2:我将使用我描述的Bitmap 和Canvas 方法添加更多代码。
Bitmap myBitmap;
Canvas myCanvas;
//Constructor
public myActivity(Bundle bundle) //or whatever your constructor is
{
myBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
myCanvas = new Canvas(myBitmap);
}
现在,当ACTION_UP 激活在draw 函数上绘制的“myCanvas”上的绘制圆圈时,您在“myCanvas”上绘制的任何内容都将应用于“myBitmap”。
case MotionEvent.ACTION_UP:
myCanvas.drawCircle(radius, x, y, paint);
x = -1;
break;