Limpiar el lienzo con Canvas.drawColor ()

Estoy tratando de cambiar la imagen de fondo de una vista personalizada con cierto éxito. La imagen cambiará pero el problema es que todavía veo rastros de la vieja imagen. Cuando intento despejar el lienzo antes de dibujar la nueva imagen, no parece trabajar. I crear un mapa de bits para almacenar la imagen. Al cambiar la imagen, llamo a Canvas.drawColor () antes de dibujar la nueva imagen pero la imagen antigua persiste. He intentado drawColor (0), drawColor (Color.BLACK), c.drawColor (0, PorterDuff.Mode.CLEAR), y ninguno de los trabajos anteriores. Como tal, tuve que publicar esto para la revisión de las mentes más experimentadas que la mía.

El código real es como sigue:

private int bgnd; private boolean switching; public void setBgnd(int incoming){ switching = true; switch (incoming){ case R.drawable.image1: bgnd = incoming; this.invalidate(); break; case R.drawable.image2: bgnd = incoming; this.invalidate(); break; } } protected void onDraw(Canvas c){ if(switching == true){ Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd); c.drawColor(0, PorterDuff.Mode.CLEAR); c.drawBitmap(b, 0, 0, null); switching = false; }else{ Bitmap b = BitmapFactory.decodeResource(getResources(), bgnd); c.drawBitmap(b, 0, 0, null); } } 

3 Solutions collect form web for “Limpiar el lienzo con Canvas.drawColor ()”

Al igual que usted, luché cómo borrar una capa superior / superficie en mi aplicación de capas múltiples / superficie. Después de 2 días de búsqueda y codificación, me enteré de mi propio camino y esto es cómo he aclarado un lienzo antes de dibujo, se puede utilizar al tener múltiples capas / superficiales. La capa de fondo no se cubrirá con negro, que es el truco.

 Paint paint = new Paint(); paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); canvas.drawPaint(paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC)); // start your own drawing 

¿No necesita llamar también invalidate () desde dentro de su método onDraw, para que los cambios realizados en ese onDraw se actualicen en la pantalla?

El invalidate () en su switch invocará su onDraw después de llamar a setBgnd, pero no hay nada que diga que se vuelva a dibujar después de haber realizado cambios en el Canvas.

Puede utilizar el método drawRGB .

  • PorterduffXfermode: borra una sección de un mapa de bits
  • Por qué mi invocación de Canvas.drawText () simplemente no funciona
  • Widget personalizado utilizando LinearLayout no obtener onDraw ()
  • Dibujo 2D eficiente en Android
  • Android SweepGradient
  • ¿Cómo animar gradiente?
  • El método ImageView: onDraw dibuja "detrás" del fondo de la imagen, no en la parte superior
  • Android: ¿Cómo usar el método onDraw en una clase que extiende Actividad?
  • OnDraw Vista personalizada dentro de un Scrollview
  • ¿Estoy invalidando toda la pantalla en cada llamada?
  • Android - calcular el ángulo del arco
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.