vertical tricks solid hexadecimal gradiente color java android gradient

java - tricks - Gradiente radial para diferentes dpi



radial background css (4)

Estoy creando un gradiente radial como:

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#7faacaFF" android:endColor="#cfe1edFF" android:gradientRadius="326" android:type="radial"/> </shape>

Pero en el campo gradientRadius usando valores como sp y dip, devuelve un error. ¿Hay una manera de especificar el radio y la escala para mdpi y escalarlo automáticamente en el resto de densidades de pantalla, o es necesario para crear múltiples archivos dibujables?


¿Y qué si haces esto?

res / drawable / foo.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#7faacaFF" android:endColor="#cfe1edFF" android:gradientRadius="@dimen/radius" android:type="radial"/> </shape>

res / values-mdpi / dimens.xml

<resources ...> ... <item name="radius" format="float" type="dimen">326</item> .... </resources>

res / values-hdpi / dimens.xml

<resources ...> ... <item name="radius" format="float" type="dimen">200.34</item> .... </resources>

¿Qué piensas?


Los docs dicen que puede especificar el atributo gradientRadius como un flotante (suponiendo que significaría px) o como una fracción.

Puede ser un valor fraccionario, que es un número de punto flotante añadido con% o% p, como "14.5%". El sufijo% siempre significa un porcentaje del tamaño base; el sufijo% p opcional proporciona un tamaño relativo a algún contenedor principal.

¿Has probado eso? Eso permitiría especificar el tamaño en dp o cualquier unidad en el diseño, y referirse a él desde aquí. Es extraño, sin embargo, la mayoría de los tamaños se especifican como dimensiones en el formato XML dibujable.


Pregunta antigua, pero esta respuesta muestra un alto rango en Google y creo que un enfoque alternativo es más escalable. En lugar de tener que proporcionar la dimensión para cada densidad, cree una dimensión independiente de la densidad desde XML:

<dimen name="gradient_radius">25dp</dimen>

Ya que no podemos aplicar esto directamente al dibujo de gradiente radial XML, debemos aplicar desde el código:

((GradientDrawable) someView.getBackground()) .setGradientRadius(getResources().getDimension( R.dimen.yellowbadge_largeradius));

Esto anula el campo android:gradientRadius , por lo que puede dejarlo en 0. Sin embargo, aún no puede usar una dimensión (basada en pantalla o de otro tipo). Aplico esto al fondo de mi vista (¡a la que ya se ha establecido el gradiente dibujable!) Pero también se aplica a un elemento src de ImageView, por supuesto.


Usa porcentajes, en el campo de android: gradientRadius.

Ejemplo:

Para un conjunto de radios del 50% a 50000% p

<gradient android:angle="45" android:centerX="0.5" android:centerY="0.5" android:endColor="#123123" android:gradientRadius="50000%p" android:startColor="#456456" android:type="radial" />