2012-05-23 17 views
8

Im tratando de lograr un componente para hacer sombras personalizadas para botones u otros componentes, sé que será más fácil con un 9patch o un png con la sombra, pero quiero cambiar el color y tamaño programáticamente también en sus estados (presionado, etc.), así que decidí probar con 9 imágenes, todas en XML para que las sombras comiencen su gradiente desde el lado del componente.Gradiente radial en XML con tamaño principal

<!-- Left Shadow layer --> 
<item> 
    <shape android:shape="rectangle" > 
     <gradient 
      android:angle="0" 
      android:endColor="#FFFF0000" 
      android:startColor="#00FF0000" /> 
    </shape> 
</item> 

Se ve bien, el problema está en las esquinas y con el androide: parámetro gradientRadius ahora su conjunto a un tamaño fijo, pero en la ayuda contextual se dice que se puede establecer en un porcentaje del tamaño de la base 10% o tamaño parental 10% p, lo que quiero es establecer un radio del 100% p para que el degradado siempre pase del color principal y desaparezca en el borde del cuadrado.

- EDITAR -.

El doc androide sobre gradientRadius gradientRadius

<shape android:shape="rectangle" > 
     <gradient 
      android:endColor="#00FF0000" 
      android:startColor="#FFFF0000" 
      android:gradientRadius="18" 
      android:centerX="100%" 
      android:centerY="100%" 
      android:type="radial" /> 
    </shape> 

Y ahí es donde estoy ahora :(no sé cómo puedo configurar este tamaño para adaptarse a la vista padre

Cualquier ayuda será apreciada, cuando termine con el componente pondré el código en una respuesta :) para que los botones típicos puedan tener sombras personalizables en xml.

Una imagen del componente merecido.

--Edit--

Im todavía está interesado en esto :) nadie tiene una pista?

Button with radia gradients

+0

¿Es esta imagen lo que quiere o lo que tiene hasta ahora? – Leaudro

+0

Hola @Leaudro, eso es lo que quiero, puedo configurarlo ajustando su ancho y alto manualmente para que el gradiente se ajuste al degradado no radial. No puedo hacer los degradados radiales para las esquinas por lo que esta forma se puede reutilizar para crear sombras para los componentes genéricos. – Goofyahead

Respuesta

2

creo que haya que renunciar con XML y aplicar dibujable en el código. Al extender la clase Drawable, puede obtener el tamaño como un rectángulo con getBounds(). También puede recalcular dinámicamente en el método onBoundsChange. También puede construir fácilmente degradados y usarlos en Paint object (método setShader)

+1

hey es hasta que alguien lea esto! Sí, también lo creo, pero es un poco molesto :) – Goofyahead