Как сделать холст белым после рисования? - PullRequest
0 голосов
/ 22 марта 2020

Я правильно рисую на холсте и сохраняю его в растровое изображение. Тем не менее, я хочу сбросить холст на белый, нажав кнопку.

Вот мой код:

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", а затем аннулировала () вызывает функцию onDraw (). Но кажется, что «cc» не распознается внутри onDraw () или внутри него всегда одинаковое значение. Я пробовал path.reset () безрезультатно.

вызов clear () не возвращает никакой ошибки.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Кажется, вы хотите, чтобы path также очищался при вызове вашего метода clear(), так что сделайте это, а затем используйте тот факт, что 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.

0 голосов
/ 22 марта 2020

Чтобы очистить весь ваш холст, используйте это:

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

Обновление:

Добавьте эту строку в вашу кнопку onclick ():

canvas.drawColor (Color. БЕЛЫЙ);

И удалите его из функции рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...