Android Canvas Clear с прозрачностью

Я пытаюсь "стереть" с холста. Так же, как ОЧЕНЬ простая проверка очистки холста, я реализовал следующее:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawColor(Color.argb(140, 0, 0, 0));
    canvas.drawColor(0, Mode.CLEAR);
}

Color.argb(140, 0, 0, 0) устанавливает вид, на который нарисовано это представление, чтобы его затемнить. drawColor(0, Mode.CLEAR) делает экран полностью черным, а не удаляет затемнение, примененное ранее. Идея взята здесь

Ответы

Ответ 1

Используйте следующее.

 canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);

Ответ 2

Решение заключалось в создании вторичного холста и растрового изображения для рисования. Мой пользовательский вид onSizeChanged() выглядел как

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    bitmap.eraseColor(Color.TRANSPARENT);
    temp = new Canvas(bitmap);
}

а метод onDrawMethod выглядит как

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    temp.drawColor(Color.argb(80, 0, 0, 0));
    temp.drawCircle(centerPosX, centerPosY, 200, transparentPaint);
    canvas.drawBitmap(bitmap, 0, 0, null);
}

где transparentPaint объявляется в onstructor как

transparentPaint = new Paint();
transparentPaint.setColor(getResources().getColor(android.R.color.transparent));
transparentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
transparentPaint.setAntiAlias(true);