2010-05-14 2 views

Antwort

71

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); 
} 
+31

ok aber niemals die Paint Instanz in den onDraw (...) Methoden – ebtokyo

+0

@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

+0

Ja, aus Leistungsgründen. Lint Kommentare Allokationen in onDraw() wie folgt: "Vermeiden Sie Objektzuweisungen während Draw/Layout-Operationen (Vorbelegung und Wiederverwendung statt)" –

28

diese

helfen kann
protected 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); 
} 
Verwandte Themen