2010-05-29 14 views
29

Plusieurs réponses mentionnent l'utilisation de GradientDrawable.setDither (true) pour dessiner des dégradés lisses dans Android. Cela n'a aucun effet dans mon code. Une idée de ce que je dois changer pour obtenir un dégradé dans mon fond d'écran en direct?Comment dessiner un dégradé lisse/dégradé sur une toile dans 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); 

Répondre

67

Voyant que vous avez un canevas à utiliser. Voici une 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; 
} 

Résultat:

Result

+0

Ce que je ne comprends pas bien est pourquoi vous devez définir les coordonnées ('200, 200, 200') deux fois. Que dois-je faire pour ajuster dynamiquement la position et le plus important TAILLE du dégradé dans la méthode 'onDraw()'? –

+2

Les premières coordonnées définissent la taille du dégradé, le deuxième ensemble de coordonnées décrit la taille du cercle contenant le dégradé. Si les coordonnées ne sont pas les mêmes, le dégradé ne remplirait pas le cercle ou serait coupé par les limites du cercle. –