0

我需要一些关于我的 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);
}

我在哪里放置invalidate()我的代码?如果我想使用按钮清除画布,我应该使用什么代码?

更新!

我这样写我的onDraw:

@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);
    }
}

重置按钮中的方法是这样的:

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

}

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

4

2 回答 2

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;
    }
于 2012-05-30T08:37:42.830 回答
-1

我在我的活动中使用这个 errage 油漆

            mBitmap.eraseColor(Color.TRANSPARENT);
            mPath.reset();
            mView.invalidate();             
于 2012-05-30T08:59:51.693 回答