如何在android中清除画布上的绘制路径

时间:2012-05-30 08:20:06

标签: android surfaceview android-canvas

我的android项目需要一些帮助。 我有一个画布,我用一些位图填充它。 我有一个在画布上画一条线的指针。 我的问题是如何清理我之前绘制的线? 我应该在画布上调用什么方法? 我已经尝试了Canvas.drawColor()invalidate(),但这不起作用。

Canvas.drawColor()@Override protected void onDraw(Canvas canvas) { // fills the canvas with black canvas.drawColor(Color.BLACK); canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, p); obaby.draw(canvas); } 的功能是什么? 请帮我解决我的问题。 提前谢谢

UPDATE! 如果我做了这样的代码:

invalidate()

我将@Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.BLACK); if(letsdraw){ canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, p); obaby.draw(canvas); } } 放在我的代码中? 如果我想使用按钮清除画布,我应该使用什么代码?

UPDATE!

我像这样写了我的onDraw:

public void rst(){
    letsdraw = false;
    invalidate();
    Log.v("tag", "this method called");

}

,重置按钮中的方法如下:

{{1}}

但是当我调用方法时画布没有变化。 我在上面的代码上写错了吗?

2 个答案:

答案 0 :(得分:1)

让你的逻辑像这样。在某些条件下在Canvas上绘制线条。检查是否要画线,然后画线。

骨架代码 -

@Override
    protected void onDraw(Canvas canvas)
    {
        if(needToDrawLine)
        {
            //draw the line
        }
        // Other drawing stuff
    }

现在只需更新您的needToDrawLine变量并致电invalidate()。你会得到你的结果。如果有效,请告诉我。

<强>更新

每次调用onDraw()时,

invalidate()方法都会调用。所以onDraw()内的每一个都会执行。方法是,你必须阻止它绘制一些部分。当您想要重绘整个视图时,您将调用invalidate(),例如 - 用于清除画布的按钮。

  • canvas.drawColor(Color.BLACK);此行将您的整个视图清除为黑色。

  • canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);此行在(0,0)处绘制位图。

  • canvas.drawPath(mPath, p);此行绘制路径mPath

  • obaby.draw(canvas);其他一些对象自行绘制。

现在 - 例如,您想在按下按钮时清除屏幕。如果它绘制了所有内容,只需初始化变量。并按下按钮更新变量。

public boolean drawEverything = true;

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        if(drawEverything)
        {
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, p);
            obaby.draw(canvas);
        }
    }

    public void buttonClicked( ... )
    {
        drawEverything = false;
    }

答案 1 :(得分:-1)

Iam在我的活动中使用了这种颜色

            mBitmap.eraseColor(Color.TRANSPARENT);
            mPath.reset();
            mView.invalidate();