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?
- Cómo dibujar un gráfico en android como Wifi Analyzer App?
- ¿Hay una manera de dibujar gráficos y gráficos en Android?
- La pintura con libgdx hace que los objetos parpadeen
- Imagen circular seleccionable como Google+
- Creación de un parche 9 dibujable en tiempo de ejecución
- ¿Es mejor utilizar los métodos de animación incorporados de marco a cuadro de Android o crear los tuyos propios?
- Obtener el valor de color de píxel de un punto en una vista de Android que incluye un lienzo con respaldo de mapa de bits
- Sprite y la animación que hace la herramienta para el juego del androide
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.
- Múltiples oyentes de GCM que utilizan GcmListenerService
- ¿La imagen será demasiado grande para que la aplicación vuelva a la actividad anterior?