我正在开发技术绘图应用程序,我需要添加一些工具来绘制线条,圆形,矩形和角点。现在我可以绘制线条和自由手绘,但我不能绘制圆形,矩形和角落。我在很多网站上发现了如何绘制但静态,我的意思是,在你预设的位置或你触摸的位置绘制形状但我需要知道如何绘制,例如,在我的位置绘制一个圆圈触摸并使它比我分开手指更大。我希望你明白我的意思。
答案 0 :(得分:2)
您可以有两个变量x和y,然后每次触摸屏幕时将x和y设置为该值,而绘图时绘制带有坐标x和y的圆。
如果你正在画画并且你只想保持一个彩绘圆圈,你可以画出圆圈并将其添加到你的画布上x和y上,然后当你触摸屏幕时,一个新的圆圈将被画在x和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);
}
现在你画的任何东西" myCanvas"当ACTION_UP
在" myCanvas"上激活绘制圆圈时,将会应用于" myBitmap"它是在draw
函数上绘制的。
case MotionEvent.ACTION_UP:
myCanvas.drawCircle(radius, x, y, paint);
x = -1;
break;