Android - Wie zeichne einen Bogen basierten Gradienten

Ich versuche zum erstellen eines Bogens (variable Anzahl von Graden), die allmählich von einer Farbe zu einer anderen. Aus dem Beispiel von blau zu rot:

Android - Wie zeichne einen Bogen basierten Gradienten

Dies ist mein code:

SweepGradient shader = new SweepGradient(center.x, center.y, resources.getColor(R.color.startColor),resources.getColor(R.color.endColor));
Paint paint = new Paint()
paint.setStrokeWidth(1);
paint.setStrokeCap(Paint.Cap.FILL);
paint.setStyle(Paint.Style.FILL);
paint.setShader(shader);
canvas.drawArc(rectF, startAngle, sweepAngle, true, paint);

Aber das Ergebnis ist das gesamte arc ist lackiert mit der gleichen Farbe.

Edit:
Nach mehr zu Experimentieren, habe ich herausgefunden, dass die Farbe spread wird bestimmt durch den Winkel des Kreisbogens. Wenn ich zeichnen Sie einen Bogen mit einem kleinen Winkel, wird nur die erste Farbe angezeigt wird. Je größer der Winkel, desto mehr Farben gezeichnet werden. Wenn der Winkel klein ist, es scheint, dass es keinen Farbverlauf.
Hier ist ein Beispiel. Ich bin Zeichnung 4 Bögen - 90, 180, 270 und 360:

RectF rect1 = new RectF(50, 50, 150, 150);
Paint paint1 = new Paint();
paint1.setStrokeWidth(1);
paint1.setStrokeCap(Paint.Cap.SQUARE);
paint1.setStyle(Paint.Style.FILL);

SweepGradient gradient1 = new SweepGradient(100, 100,
        Color.RED, Color.BLUE);
paint1.setShader(gradient1);

canvas.drawArc(rect1, 0, 90, true, paint1);

RectF rect2 = new RectF(200, 50, 300, 150);
Paint paint2 = new Paint();
paint2.setStrokeWidth(1);
paint2.setStrokeCap(Paint.Cap.SQUARE);
paint2.setStyle(Paint.Style.FILL);

SweepGradient gradient2 = new SweepGradient(250, 100,
        Color.RED, Color.BLUE);
paint2.setShader(gradient2);

canvas.drawArc(rect2, 0, 180, true, paint2);

RectF rect3 = new RectF(50, 200, 150, 300);
Paint paint3 = new Paint();
paint3.setStrokeWidth(1);
paint3.setStrokeCap(Paint.Cap.SQUARE);
paint3.setStyle(Paint.Style.FILL);

SweepGradient gradient3 = new SweepGradient(100, 250,
        Color.RED, Color.BLUE);
paint3.setShader(gradient3);

canvas.drawArc(rect3, 0, 270, true, paint3);

RectF rect4 = new RectF(200, 200, 300, 300);
Paint paint4 = new Paint();
paint4.setStrokeWidth(1);
paint4.setStrokeCap(Paint.Cap.SQUARE);
paint4.setStyle(Paint.Style.FILL);

SweepGradient gradient4 = new SweepGradient(250, 250,
        Color.RED, Color.BLUE);
paint4.setShader(gradient4);

canvas.drawArc(rect4, 0, 360, true, paint4);

Und hier ist das Ergebnis:

Android - Wie zeichne einen Bogen basierten Gradienten

Dies ist überraschend, weil ich erwarten würde, die ROTEN an den start der arc, die BLAUEN am Ende und enything zwischen werden gleichmäßig verteilt, unabhängig von Winkel.
Ich habe versucht, den Raum der Farben, die manuell mithilfe der Positionen parameter, aber die Ergebnisse waren die gleichen:

int[] colors = {Color.RED, Color.BLUE};
float[] positions = {0,1};
SweepGradient gradient = new SweepGradient(100, 100, colors , positions);

Irgendeine Idee, wie man dieses Problem lösen?

InformationsquelleAutor der Frage Yoav | 2012-01-27

Schreibe einen Kommentar