2012-03-30 18 views
6

Çizim çizgilerini olay ile silmek istediğim bir uygulama yapıyorum. Bunun için ben Android'de boya uygulamasında varsayılan silme rengi nasıl değiştirilir?

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

kullanılan ancak bir çizgi silme sırasında, o satır ilk siyah sonra silinir hale gelir. Çizim yapmayı silmek için şeffaf bir renk istiyorum.

+1

Ben de böyle bir sorun dışarı getir ....... Can herhangi vücut yardıma üzerinde silme geçiş yapmak için ...? – Kalpesh

+0

@ user1287756 bu konuyla ilgili herhangi bir çözümünüz var. – AndroidDev

+0

Aynı sorun var. Herhangi bir çözüm var mı? –

cevap

1

Ben APIDemos yani android-sdk\samples\android-17\ApiDemos

den FingerPaint.java geçirdi ve

@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() 
} 

silerken Şimdi bir siyah renk çekmez için

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

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

    canvas.drawPath(mPath, mPaint); 
} 

değiştirdiniz her şey iyi çalışıyor. % 100 doğru cevap olduğundan emin değilim ama benim için çalışıyor. Benim silme düğmesi line.In siyah kaldırmak için hile bir tür kullandık Hey

+0

Farklı bir Canvas örneğinin yolunu çizdiğinizden kesinlikle yanlıştır. – EyalBellisha

+1

omg çalışmamı yaptınız.Thnx alot man :) –

+0

@EyalBellisha aslında benim için de çalışıyor çünkü mCanvas nesnesine kalıcı olarak sadece onDraw tuval nesnesine geçici olarak, silgi mCanvas nesnesinde anında çalışır. OnDraw tuval nesnesindeki silgi yolunu çizmeye çalışırsam, yalnızca parmağımı kaldırdıktan sonra uygulanır. – kabuto178

0

, aşağıda .. yerine XferMode kullanmak yerine,

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

beyaza rengini ayarlamak üzerinde silme için çalışıyor olması Saydam arka plan ...

Silme işlemini başlatmak için SetErase (true) öğesini çağırın.

OnDraw yöntemi daha sonra (siyah yerine) beyaz renkli bir yol çizecek ve daha sonra saydam renge temizlenecek ve tüm yolunuzu bilgi vermeyeceksiniz.

Çağrı SetErase()/kapalı

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); 
     } 
    } 
İlgili konular