Рисование «дыр» на холсте

Я пытаюсь нарисовать такую фигуру в методе onDraw пользовательского представления.

К сожалению, я не могу «вырезать» прозрачный круг на холсте (рисуя круг с помощью Color.Transparent).

Должен ли я сначала нарисовать фигуру в другом растровом изображении, а затем нарисовать ее на холсте, предоставленном onDraw? Или это лучший (более простой) способ сделать это?

Вот код, который я пробовал (работает с Color.WHITE):

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(Color.TRANSPARENT);
mPaint.setStrokeWidth(4);
mPaint.setStyle(Style.STROKE);

canvas.drawColor(getResources().getColor(R.color.black_overlay));
canvas.drawCircle(-3*(this.getBottom()-this.getTop())/4, (this.getTop()+this.getBottom())/2, this.getBottom()-this.getTop(), mPaint);

PS: я получил именно ту форму, которую хотел, используя Color.WHITE:

Решение

@Override
public void onDraw(Canvas canvas)
{
    mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap);
    mCanvas.drawColor(getResources().getColor(R.color.black_overlay));
    mCanvas.drawCircle(-3*(getHeight())/4, (getHeight())/2, getHeight(), mPaint);
    canvas.drawBitmap(mBitmap, 0, 0, null);
}
with
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaint.setStrokeWidth(4);
    mPaint.setStyle(Style.STROKE);
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));

Примечание: createBitamp и новый холст должны быть удалены из метода onDraw.

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

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