2012-03-30 18 views
6

Realizo una Aplicación en la que deseo borrar líneas de dibujo con evento. Para ello he utilizado¿Cómo cambiar el color de borrado predeterminado en la aplicación de pintura en Android?

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

pero en el momento de borrar una línea, esa línea se convierte en negro primero y luego borrar. Quiero un color transparente para borrar un dibujo de una ruta.

+1

también voy a buscar a cabo ese problema ....... ¿Puede cualquier ayuda/cuerpo ...? – Kalpesh

+0

@ user1287756 tienes alguna solución para ese problema. – AndroidDev

+0

Tengo el mismo problema. ¿Hay alguna solución? –

Respuesta

1

que han pasado por el FingerPaint.java de APIDemos es decir android-sdk\samples\android-17\ApiDemos

y modificado

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

Ahora bien, no está dibujando un color negro al borrar, todo funciona bien No estoy seguro de que sea 100% correcta, pero funciona para mí.

+0

Definitivamente es incorrecto, ya que está dibujando el camino a una instancia de Canvas diferente – EyalBellisha

+1

omg que ha hecho mi trabajo.Thnx mucho hombre :) –

+0

@EyalBellisha realmente funciona para mí también, porque está dibujando el objeto mCanvas de forma permanente y solo temporalmente para el objeto de lienzo onDraw, el borrador funciona instantáneamente en el objeto mCanvas. Si trato de dibujar la ruta del borrador en el objeto del lienzo onDraw, solo se aplica después de levantar el dedo. – kabuto178

0

Hey He utilizado una especie de truco para quitar el negro line.In mi botón de borrar, he puesto el color a blanco, en lugar de utilizar XferMode ..

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

El siguiente funciona para borrar el un fondo transparente ...

Llamada SetErase (true) para comenzar a borrar.

El método OnDraw dibujará una ruta blanca (en lugar de negro) que luego se borrará al color transparente y mantendrá toda su ruta de deshacer la información.

llamada SetErase() para alternar el borrado 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); 
     } 
    } 
Cuestiones relacionadas