2013-08-08 22 views
7

Sto provando a disegnare una forma come questa nel metodo onDraw di una vista personalizzata.Disegno di "buchi" in una tela

Purtroppo, non riesco a "tagliare" il cerchio trasparente sulla tela (disegnando un cerchio con Color.Transparent).

Dovrei prima disegnare la forma in un'altra bitmap e disegnarla sulla tela fornita da onDraw? O è un modo migliore (più semplice) per farlo?

Custom shape

Ecco il codice che ho provato (funziona con 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: ho avuto la forma esatta che volevo durante l'utilizzo Color.White: Result achieved with Color.WHITE

Soluzione

@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: il createBitamp e il nuovo canvas devono essere spostati dal metodo onDraw.

+0

bene, immagine uso, se si vede che è manualmente troppo complicato –

+0

Che cos'è ColorTransparent? Perché non pubblicare un codice di ciò che hai provato? Vedi se questo aiuta - http://stackoverflow.com/questions/9988671/android-r-color-transparent-not-fully-transparent – Sundeep

+0

Color.TRANSPARENT è una costante di Android. – Tryum

risposta

9
+0

Ho rivisto 3 dei 4 collegamenti, ma provandolo di nuovo, sono riuscito a perforare il mio buco usando un'altra bitmap. Dovrei accettare questa risposta o fare la mia risposta con il mio codice finale? – Tryum

+3

@Tryum È una tua decisione. Puoi accettare la mia risposta e ricevere +2 punti reputazione o scrivere la tua risposta con il tuo codice e accettare entro 48 ore (non riceverai la reputazione). C'è anche un'altra soluzione: scrivi la tua risposta e accetta la mia. Grazie, – TN888

Problemi correlati