2012-03-30 9 views
6

Realizzo un'applicazione in cui voglio cancellare linee disegno con evento. Per questo ho usatoCome modificare il colore di cancellazione predefinito nell'applicazione di disegno in Android?

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); 

ma al momento della cancellazione di una linea, quella linea diventa nero prima poi cancellato. Voglio un colore trasparente per cancellare un disegno di un tracciato.

+1

ho anche prelevo che problema ....... Can alcun aiuto corpo ...? – Kalpesh

+0

@ user1287756 hai una soluzione per questo problema. – AndroidDev

+0

Ho lo stesso problema. C'è qualche soluzione? –

risposta

1

Ho passato con il FingerPaint.java da APIDemos cioè android-sdk\samples\android-17\ApiDemos

e modificato

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(0xFFAAAAAA); 

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    canvas.drawPath(mPath, mPaint); 
} 

a

@Override 
protected void onDraw(Canvas canvas) { 
    canvas.drawColor(0xFFAAAAAA); 

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    mCanvas.drawPath(mPath, mPaint); // this line changed 
            // mCanvas is Canvas variable which is 
            // initialized in onSizeChanged() 
} 

Ora non è il disegno di un colore nero mentre la cancellazione, tutto funziona bene Non sono sicuro che sia la risposta corretta al 100% ma funziona per me.

+0

E 'decisamente sbagliato visto che stai disegnando il percorso su un'istanza di Canvas diversa – EyalBellisha

+1

omg hai fatto il mio lavoro.Thnx molto uomo :) –

+0

@EyalBellisha in realtà funziona anche per me, perché stai disegnando sull'oggetto mCanvas in modo permanente e solo temporaneamente sull'oggetto canvas onDraw, la gomma funziona immediatamente sull'oggetto mCanvas. Se provo a disegnare il percorso della gomma sull'oggetto canvas onDraw, viene applicato solo dopo aver sollevato il dito. – kabuto178

0

Hey ho usato una specie di trucco per rimuovere il nero line.In il mio tasto di cancellazione, ho impostato il colore al bianco, invece di utilizzare XferMode ..

if(erase){ 
paintColor = Color.parseColor(newColor); 
drawPaint.setColor(paintColor); 
} 
0

Il seguito lavora per la cancellazione su uno sfondo trasparente ...

Call SetErase (true) per iniziare la cancellazione.

Il metodo OnDraw disegnerà un tracciato bianco (anziché nero) che verrà quindi cancellato nel colore trasparente e verranno mantenute tutte le informazioni di annullamento del percorso.

chiamata SetErase() per attivare la cancellazione on/off

public void SetErase(bool On) 
    { 
     if (On) 
     { 
      if (!_erasing) 
      { 
       _delpaint = new Paint(_paint); 
       _delpaint.Color = Color.White; 
       _paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Clear)); 
       _erasing = true; 
      } 
     } 
     else if (_erasing) 
     { 
      _erasing = false; 
      _paint.SetXfermode(null); 
     } 
    } 

    protected override void OnDraw(Canvas canvas) 
    { 
     canvas.DrawColor(BackgroundColor); 
     canvas.DrawBitmap(CanvasBitmap, 0, 0, _bitmapPaint); 
     if (_erasing) 
     { 
      canvas.DrawPath(_path, _delpaint); // draw white path 
     } 
     else 
     { 
      canvas.DrawPath(_path, _paint); 
     } 
    } 
Problemi correlati