【问题标题】:How to make a canvas white after drawing?绘制后如何使画布变白?
【发布时间】:2020-03-22 17:20:26
【问题描述】:

我正在画布上正确绘图并将其保存到位图中。 但是,我想通过单击按钮将画布重置为白色。

这是我的代码:

public class Canvas extends View {
    Paint paint;
    Path path;
    boolean cc = false;

public Canvas(Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    paint = new Paint();
    path = new Path();
    paint.setAntiAlias(true);
    paint.setColor(Color.RED);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(5f);

}

@Override
protected void onDraw(android.graphics.Canvas canvas) {
    super.onDraw(canvas);
    if (!cc) {
        canvas.drawPath(path, paint);
    }
    else {
        canvas.drawColor(Color.WHITE);
        cc = false;
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    float xPos = event.getX();
    float yPos = event.getY();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(xPos, yPos);
            return true;
        case MotionEvent.ACTION_MOVE:
            path.lineTo(xPos, yPos);
            break;
        case MotionEvent.ACTION_UP:
            break;
        default:
            return false;
    }
    invalidate();
    return true;
}


public void clear() {
    cc = true;
    invalidate();
}

我的 clear() 函数将 cc 设置为“true”,然后 invalidate() 调用 onDraw() 函数。但似乎在 onDraw() 内部无法识别“cc”,或者它内部始终具有相同的值。 我尝试了 path.reset() 没有结果。

调用 clear() 不会返回任何错误。

【问题讨论】:

    标签: java android canvas


    【解决方案1】:

    似乎您希望在调用 clear() 方法时也清除 path,所以这样做,然后使用 path 为空的事实来清除画布。

    public void clear() {
        path.reset();
        invalidate();
    }
    
    @Override
    protected void onDraw(android.graphics.Canvas canvas) {
        super.onDraw(canvas);
        if (path.isEmpty()) {
            canvas.drawColor(Color.WHITE);
        } else {
            canvas.drawPath(path, paint);
        }
    }
    

    这完全消除了cc 字段。

    【讨论】:

    • 在活动类中,我有一个按钮,它调用画布的方法 clear()。完全按照您所说的进行操作并单击按钮不会清除画布。我是否需要通过 android:id 使活动类中的画布无效?
    【解决方案2】:

    要清除所有画布,请使用:

         Paint transparent = new Paint();
         transparent.setAlpha(0);
    

    更新:

    在你的按钮 onclick() 中添加这一行:

    canvas.drawColor(Color.WHITE);

    并将其从绘图功能中移除。

    【讨论】:

    • 这样做不起作用:public void clear() { paint.setAlpha(0);无效(); }
    • 你在那里添加了 invalidate() 吗?
    • 是的,但什么也没发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多