Gegeben ist wie folgt:Wie fülle ich einen Pfad in Android mit einem linearen Farbverlauf?
Obwohl das ist ein Rechteck Ich bin die Suche nach etwas, das mit jedem geschlossenen Pfad funktioniert.
Gegeben ist wie folgt:Wie fülle ich einen Pfad in Android mit einem linearen Farbverlauf?
Obwohl das ist ein Rechteck Ich bin die Suche nach etwas, das mit jedem geschlossenen Pfad funktioniert.
Während steelbytes' Antwort haben Sie wahrscheinlich über die einzelnen Abschnitte des Gradienten mehr Kontrolle geben, können Sie es ohne den Pfad zu tun:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint p = new Paint();
// start at 0,0 and go to 0,max to use a vertical
// gradient the full height of the screen.
p.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
canvas.drawPaint(p);
}
ok aber niemals die Paint Instanz in den onDraw (...) Methoden – ebtokyo
@ebtokyo: Aus Leistungsgründen? Würden Sie es bei der Erstellung zwischenspeichern und seine Größe auf jedem onDraw aktualisieren (oder vielleicht in der Größe ändern)? – idbrii
Ja, aus Leistungsgründen. Lint Kommentare Allokationen in onDraw() wie folgt: "Vermeiden Sie Objektzuweisungen während Draw/Layout-Operationen (Vorbelegung und Wiederverwendung statt)" –
diese
helfen kannprotected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
int w = getWidth();
int h = getHeight();
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
Path pth = new Path();
pth.moveTo(w*0.27f,0);
pth.lineTo(w*0.73f,0);
pth.lineTo(w*0.92f,h);
pth.lineTo(w*0.08f,h);
pth.lineTo(w*0.27f,0);
p.setColor(0xff800000);
p.setShader(new LinearGradient(0,0,0,h,0xff000000,0xffffffff,Shader.TileMode.CLAMP));
canvas.drawPath(pth,p);
}
Ein brillanter, nein eine fantastische Frage! – Subby