Quiero pintar gráficos en un lienzo de modo que los colores sean aditivos. Por ejemplo, quiero producir esto:
¿Cómo pintar con alfa?
Pero en cambio, me sale esto:
Tenga en cuenta que la mitad de fondo blanco, mitad negro es intencional, sólo para ver cómo alfa interactúa tanto con antecedentes. Estaré feliz de tener este trabajo con cualquier fondo. Aquí está mi código:
public class VennColorsActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
class VennView extends View {
public VennView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int alpha = 60, val = 255;
int ar = Color.argb(alpha, val, 0, 0);
int ag = Color.argb(alpha, 0, val, 0);
int ab = Color.argb(alpha, 0, 0, val);
float w = canvas.getWidth();
float h = canvas.getHeight();
float cx = w/2f;
float cy = h/2;
float r = w/5;
float tx = (float) (r * Math.cos(30 * Math.PI/180));
float ty = (float) (r * Math.sin(30 * Math.PI/180));
float expand = 1.5f;
Paint paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawRect(new Rect(0, 0, (int) w, (int) (h/2)), paint);
PorterDuff.Mode mode = android.graphics.PorterDuff.Mode.ADD;
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColorFilter(new PorterDuffColorFilter(ar, mode));
paint.setColor(ar);
canvas.drawCircle(cx, cy - r, expand * r, paint);
paint.setColorFilter(new PorterDuffColorFilter(ag, mode));
paint.setColor(ag);
canvas.drawCircle(cx - tx, cy + ty, expand * r, paint);
paint.setColorFilter(new PorterDuffColorFilter(ab, mode));
paint.setColor(ab);
canvas.drawCircle(cx + tx, cy + ty, expand * r, paint);
}
}
this.setContentView(new VennView(this));
}
}
Puede alguien por favor me ayude a entender cómo pintar con colores aditivos en los gráficos de Android?
Muchas gracias, Pavel; ¡y tan rápido también! –
BTW, ¿Conoces una alternativa a PorterDuff.Mode.ADD que sea compatible con SDK versión 8? La documentación dice que se agregó ADD en la versión 8, pero se encuentra. Realmente se introdujo en la versión 11 y se bloquea en algunos dispositivos más antiguos que no deberían haber permitido instalar mi widget. –
¡Esto es genial!¿Puedes aplicar esta técnica a bitmaps que se superponen entre sí? –