Ответ 1
Используйте следующее.
canvas.drawColor(Color.TRANSPARENT,Mode.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)
делает экран полностью черным, а не удаляет затемнение, примененное ранее. Идея взята здесь
Используйте следующее.
canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);
Решение заключалось в создании вторичного холста и растрового изображения для рисования. Мой пользовательский вид 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);