Próbuję narysować taki kształt w metodzie onDraw widoku niestandardowego.Rysowanie "otworów" w obszarze roboczym
Niestety, nie mogę "wyciąć" przezroczystego kółka na płótnie (rysując okrąg z kolorem. Przezroczysty).
Czy najpierw należy narysować kształt w innej mapie bitowej, a następnie narysować go na płótnie dostarczonym przez onDraw? Czy jest to lepszy (prostszy) sposób to zrobić?
Oto kod próbowałem (współpracuje z 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: Mam dokładny kształt chciałem podczas korzystania Color.WHITE:
Rozwiązanie
@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));
Uwaga: createBitamp i nowe płótno powinny zostać przeniesione z metody onDraw.
dobrze, użycie obrazu, jeśli widzisz, że ręcznie jest zbyt skomplikowany –
Co to jest ColorTransparent? Czemu nie zamieścić kodu sprawdzającego? Sprawdź, czy to pomaga - http://stackoverflow.com/questions/9988671/android-r-color-transparent-not-fully-transparent – Sundeep
Color.TRANSPARENT jest stałą systemu Android. – Tryum