2010-05-29 4 views
29

Mehrere Antworten erwähnen, GradientDrawable.setDither (true) zu verwenden, um glatte Verläufe in Android zu zeichnen. Das hat keinen Effekt in meinem Code. Irgendeine Idee, was ich ändern muss, um einen gut aussehenden Farbverlauf in meinem Live Wallpaper zu bekommen?So zeichnen Sie einen glatten/geditherten Farbverlauf auf einer Zeichenfläche in Android

GradientDrawable gradient = new GradientDrawable(Orientation.TL_BR, colors); 
gradient.setGradientType(GradientDrawable.RADIAL_GRADIENT); 
gradient.setGradientRadius(canvas.getWidth() * 2); 
gradient.setDither(true); 
gradient.setGradientCenter(-0.1f, -0.1f); 
gradient.setBounds(cb); 
gradient.draw(canvas); 

Antwort

67

Da Sie ein Canvas haben, mit dem Sie arbeiten können. Hier ist eine Option.

private Bitmap makeRadGrad() { 
    RadialGradient gradient = new RadialGradient(200, 200, 200, 0xFFFFFFFF, 
      0xFF000000, android.graphics.Shader.TileMode.CLAMP); 
    Paint p = new Paint(); 
    p.setDither(true); 
    p.setShader(gradient); 

    Bitmap bitmap = Bitmap.createBitmap(400, 400, Config.ARGB_8888); 
    Canvas c = new Canvas(bitmap); 
    c.drawCircle(200, 200, 200, p); 

    return bitmap; 
} 

Ergebnis:

Result

+0

Was ich nicht vollständig verstehen, warum müssen Sie Koordinaten definieren ('200, 200, 200') zweimal. Was muss ich tun, um die Position und vor allem die GRÖSSE des Farbverlaufs in der 'onDraw()' Methode dynamisch anzupassen? –

+2

Die ersten Koordinaten definieren die Größe des Gradienten, der zweite Koordinatensatz beschreibt die Größe des Kreises, der den Gradienten enthält. Wenn die Koordinaten nicht gleich sind, würde der Gradient den Kreis nicht ausfüllen oder würde durch die Kreisgrenzen abgeschnitten werden. –

Verwandte Themen