Реализация ластика в приложении для рисования Android - черный след, а затем прозрачный

У меня есть приложение для рисования для Android, и в настоящее время я пытаюсь добавить в него настоящий ластик. Раньше я только использовал белую краску для ластика, но это больше не будет работать, так как теперь я разрешаю цвета фона и изображения. Я делаю это, имея изображение под прозрачным холстом.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я активирую свой ластик, он рисует сплошную черную дорожку, пока мой палец опущен, но когда я отпускаю, он становится прозрачным. Смотрите скриншоты ниже:

Вот так это выглядит, пока мой палец находится на экране - сплошной черный след

Вот как это выглядит, когда я убираю палец с экрана

Таким образом, кажется, что я приближаюсь, но я не могу найти правильную комбинацию настроек, чтобы избежать черного следа, когда мой палец касается во время стирания. Вот некоторые соответствующие фрагменты кода:

OnDraw

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.TRANSPARENT);
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    canvas.drawPath(mPath, mPaint);
    canvas.drawPath(mPreviewPath, mPaint);
}

onTouchEvent

@Override
public boolean onTouchEvent(MotionEvent event) {
    float currentX = event.getX();
    float currentY = event.getY();

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touchStart(currentX, currentY);
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            touchMove(currentX, currentY);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            touchUp(currentX, currentY);
            invalidate();
            break;
    }
    return true;
}

Текущая попытка настройки ластика

public void startEraser() {
    mPaint.setAlpha(0);
    mColor = Color.TRANSPARENT;
    mPaint.setColor(Color.TRANSPARENT);
    mPaint.setStrokeWidth(mBrushSize);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setMaskFilter(null);
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
    mPaint.setAntiAlias(true);
}

Есть несколько других сообщений о ластиках, но большинство из них просто говорят, чтобы использоватьPorterDuff.Mode.CLEAR, setMakFilter(null) и что это должно работать. В моем случае это не так. Что бы я ни пытался, сначала я получаю черный след, а затем желаемый результат только после выпуска.

Я могу предоставить больше кода, если это необходимо.

Ответы на вопрос(5)

Ваш ответ на вопрос