我的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}}
但是当我调用方法时画布没有变化。 我在上面的代码上写错了吗?
答案 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();