2012-03-30 12 views
6

Tworzę aplikację, w której chcę wymazać linie rysunku ze zdarzeniem. Do tego użyłemJak zmienić domyślny kolor kasowania w aplikacji do malowania w systemie Android?

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

ale w momencie kasowania linii, linia ta najpierw staje się czarna, a następnie wymazana. Chcę przezroczysty kolor do usuwania rysunku ścieżki.

+1

ja również pobrać z tego problemu ....... może ktoś pomóc ciała ...? – Kalpesh

+0

@ user1287756 masz rozwiązanie tego problemu. – AndroidDev

+0

Mam ten sam problem. Czy istnieje jakieś rozwiązanie? –

Odpowiedz

1

I przeszły FingerPaint.java z APIDemos tj android-sdk\samples\android-17\ApiDemos

i modyfikowane

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

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

    canvas.drawPath(mPath, mPaint); 
} 

do

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

Teraz to nie jest rysunek czarną barwę podczas usuwania, wszystko dziala. Nie jestem pewien, czy to jest w 100% właściwa odpowiedź, ale działa dla mnie.

+0

Jest to zdecydowanie niewłaściwe, ponieważ rysujesz ścieżkę do innego instancji Canvas: – EyalBellisha

+1

omg dokonałeś mojej pracy. Thnx dużo ludzi :) –

+0

@EyalBellisha faktycznie działa również dla mnie, ponieważ rysujesz do obiektu mCanvas na stałe i tylko tymczasowo do obiektu canvas onDraw, gumka natychmiast działa na obiekcie mCanvas. Jeśli spróbuję narysować ścieżkę gumki na obiekcie canvas onDraw, zostanie ona zastosowana dopiero po podniesieniu palca. – kabuto178

0

Hej Użyłem pewnego rodzaju sztuczki, aby usunąć czarny line.In moim przycisk kasowania, mam ustawić kolor na biały, zamiast korzystania XferMode ..

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

Poniższa pracuje na wymazywanie przezroczyste tło ...

Wywołanie SetErase (true), aby rozpocząć kasowanie.

Metoda OnDraw następnie narysuje białą ścieżkę (zamiast czarnego), która następnie zostanie wyczyszczona do przezroczystego koloru i zachowasz wszystkie informacje cofania ścieżki.

połączeń SetErase(), aby włączyć/wyłączyć na wymazywanie

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); 
     } 
    } 
Powiązane problemy