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); } } 

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 .

  • problemas con Android FrameLayout cuando override onDraw
  • Por qué mi invocación de Canvas.drawText () simplemente no funciona
  • Cómo dibujar Arco entre dos puntos en el lienzo?
  • Dibuja un texto en una ruta circular en android
  • Dibujar superposición (HUD) en Android VideoView?
  • Lona de Android - Dibuja un agujero
  • Android - calcular el ángulo del arco
  • Dibujo 2D eficiente en Android
  • Android SweepGradient
  • El método ImageView: onDraw dibuja "detrás" del fondo de la imagen, no en la parte superior
  • View.onDraw () - ¿cuándo se llama?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.