绘制形状动态

时间:2015-05-27 13:20:17

标签: android canvas

我正在开发技术绘图应用程序,我需要添加一些工具来绘制线条,圆形,矩形和角点。现在我可以绘制线条和自由手绘,但我不能绘制圆形,矩形和角落。我在很多网站上发现了如何绘制但静态,我的意思是,在你预设的位置或你触摸的位置绘制形状但我需要知道如何绘制,例如,在我的位置绘制一个圆圈触摸并使它比我分开手指更大。我希望你明白我的意思。

1 个答案:

答案 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:我将使用我所描述的BitmapCanvas方法添加更多代码。

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;