Desenhando “furos” em uma tela
Estou tentando desenhar uma forma como esta no método onDraw de um modo de exibição personalizado.
Infelizmente, não posso "recortar" o círculo transparente na tela (desenhando um círculo com um Color.Transparent).
Devo primeiro desenhar a forma em outro bitmap e desenhá-la na tela fornecida pelo onDraw? Ou é uma maneira melhor (mais simples) de fazer isso?
Aqui está o código que eu tentei (funciona com 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: Consegui o formato exato que queria ao usar o Color.WHITE:
Solução
@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));
Nota: o createBitamp e a nova tela devem ser removidos do método onDraw.