2010-05-29 17 views
29

En varias respuestas se menciona el uso de GradientDrawable.setDither (verdadero) para dibujar degradados suaves en Android. Eso no tiene efecto en mi código. ¿Alguna idea de lo que tengo que cambiar para obtener un buen degradado en mi fondo de pantalla en vivo?Cómo dibujar un degradado liso/difuminado en un lienzo en 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); 

Respuesta

67

En vista de que usted tiene un lienzo para trabajar. Aquí hay una opción.

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; 
} 

Resultado:

Result

+0

Lo que no entiendo es plenamente por qué tiene que definir las coordenadas ('200, 200, 200') dos veces. ¿Qué debo hacer para ajustar dinámicamente la posición y, lo que es más importante, el TAMAÑO del degradado en el método 'onDraw()'? –

+2

Las primeras coordenadas definen el tamaño del degradado, el segundo conjunto de coordenadas describe el tamaño del círculo que contiene el degradado. Si las coordenadas no son las mismas, el degradado no llenaría el círculo o quedaría cortado por los límites del círculo. –

Cuestiones relacionadas