Chcę malować grafikę na płótnie tak, aby kolory były addytywne. Na przykład, chcę produkować to:
Jak malować alfa?
Ale zamiast tego, mam to:
Należy pamiętać, że pół białe, pół czarne tło jest zamierzone, żeby zobaczyć, jak alfa współdziała zarówno z tła. Będę szczęśliwy, że będę mógł pracować z dowolnym tłem. Oto mój kod:
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));
}
}
Czy ktoś może mi pomóc zrozumieć, jak malować z dodatkowymi kolorami w grafice systemu Android?
Wielkie dzięki, Pavel; i tak szybko też! –
BTW, czy znasz alternatywę dla PorterDuff.Mode.ADD, która jest kompatybilna z SDK w wersji 8? Dokumentacja mówi, że ADD dodano w wersji 8, ale leży. Zostało to naprawdę wprowadzone w wersji 11 i zawiesza się na starszych urządzeniach, które nie powinny mieć zainstalowanego widżetu. –
To jest świetne!Czy możesz zastosować tę technikę do map bitowych, które nakładają się na siebie? –