2011-12-12 21 views
11

Im tratando de reproducir el siguiente degradado mediante programación.Crear un degradado radial programáticamente

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient 
     android:startColor="@color/startcolor" 
     android:centerColor="#343434" 
     android:endColor="#00000000" 
     android:type="radial" 
     android:gradientRadius="140" 
     android:centerY="45%" 
    /> 
    <corners android:radius="0dp" /> 
</shape> 

¿Cómo puedo establecer programáticamente el parámetro? Gracias

 android:centerY="45%" 

Respuesta

24

http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html

Para establecer ese parámetro específico (estoy asumiendo un valor centerx ya que no se ha especificado una):

yourGradientDrawable.setGradientCenter(1.0f, 0.45f); 

Así que para crear el gradiente anterior (excepto con diferentes colores) programáticamente:

GradientDrawable g = new GradientDrawable(Orientation.TL_BR, new int[] { getResources().getColor(R.color.startcolor), Color.rgb(255, 0, 0), Color.BLUE }); 
g.setGradientType(GradientDrawable.RADIAL_GRADIENT); 
g.setGradientRadius(140.0f); 
g.setGradientCenter(0.0f, 0.45f); 

Nota: La orientación se ignora f o un degradado radial, pero es necesario para el constructor que toma los colores.

+2

Esto no funciona para mí, no hay gradiente radial jsut un fondo blanco liso. – Poutrathor

+1

No es necesario llamar a '' 'setGradientCenter''' si desea utilizar el valor central predeterminado –

Cuestiones relacionadas