AvoidXferMode para reemplazar un color en el lienzo

Estoy intentando substituir un color para algo que se dibuja en una lona usando AvoidXferMode . De los documentos Android parece que es exactamente lo que necesito:

Evitar Xfermode xfermode dibujará el src en todas partes excepto en la parte superior de la opColor o, dependiendo del Modo, dibuje sólo sobre la opColor.

Lo que estoy intentando es algo como esto:

Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawPaint(paint); // actually drawing a bitmap here paint.setXferMode(new AvoidXferMode(Color.RED, 0, TARGET); paint.setColor(Color.GREEN); canvas.drawPaint(paint); 

Sin embargo, esto sólo da una pantalla roja, no verde como yo esperaría (reemplazando el rojo con verde). Supongo que estoy perdiendo el punto en algún lugar … ¿Alguna sugerencia?

Finalmente me enteré de lo que es cuestión es, hay algunas pistas aquí: AvoidXferMode Tolerancia pero realmente me golpeó cuando leí esta publicación http://stuffthathappens.com/blog/2010/06/04/android-color-banding/ Por Eric Burke. La tolerancia está fallando porque el lienzo de vista no está en modo 8888.

Esto significa que cuando dibuja un color o un mapa de bits en ese lienzo los colores se convierten al formato de píxeles de destino y el color podría cambiar ligeramente. Para solucionar esto, puede cambiar el formato de píxel de toda la ventana como se ve en la publicación de Eric o puede dibujar en un búfer de espalda 8888.

Desafortunadamente el enlace al post de Eric está muerto, pero Roman Guy también tiene una escritura similar aquí: http://www.curious-creature.org/2010/12/08/bitmap-quality-banding-and-dithering/

Estoy teniendo actualmente el mismo problema pero lo conseguí trabajando especificando 255 como tolerancia en lugar de otro. De acuerdo con la documentación de la API esto es incorrecto (debe dibujar el destino en TODOS LOS LADOS con este ajuste de tolerancia total) pero por alguna razón el valor 255 hace exactamente lo que el valor 0 debe hacer.

  • Coloque un rectángulo alrededor de una cadena en un lienzo de Android
  • SetCompoundDrawablesWithIntrinsicBounds (int, int, int, int) no funciona
  • ¿Qué capacidades de eliminación automática de overdraw Android proporciona?
  • Android SurfaceFlinger
  • ¿Existe alguna desventaja en el uso de sólo recursos de imágenes de alta resolución para una aplicación de Android?
  • Cómo crear efectos de gráficos de partículas de fuegos artificiales en android
  • ¿Cómo configurar la opacidad de la forma?
  • Android: colorea debajo del gráfico de líneas
  • ¿Es posible hacer un 9-parche dibujable para un gráfico de la leyenda?
  • ¿Diferencia entre "tamaño de pantalla" y "densidad de pantalla" en Android?
  • Android: rotar recorta las esquinas de la forma
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.