Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Forma Drawable gradientRadius sólo funciona en píxeles. ¿No es inútil? % De valores no funcionan

Quiero utilizar la forma dibujable con un gradiente radial como fondo para una vista. De acuerdo con el javadoc el radio del gradiente se puede establecer como un valor específico (presumiblemente píxeles) o como un porcentaje:

Androide: gradientRadius

Radio del gradiente, utilizado sólo con gradiente radial.

Puede ser un valor en coma flotante, como "1.2".

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

Corrija si estoy equivocado, pero usar un valor de píxel aquí es completamente inútil ya que este gradiente se verá totalmente diferente de una densidad de pantalla a otra (probado, y sí esto es cierto). Traté de ir con los valores% y% p, pero no funcionaron en absoluto.

Me sumergí en el código fuente de Android para ver cómo gradientRadius se está procesando y encontré esto en la clase GradientDrawable:

TypedValue tv = a.peekValue( com.android.internal.R.styleable.GradientDrawableGradient_gradientRadius); if (tv != null) { boolean radiusRel = tv.type == TypedValue.TYPE_FRACTION; st.mGradientRadius = radiusRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat(); } else ... } 

Ah ah Así que agregar% o% p hace es dividir mi valor por 100. (He probado esto porque la documentación para TypeValue.getFraction () es aún más confusa). 65% se convirtió en 0,65. Tiene sentido, pero no sirve para nada.

¿Cuál es la mejor manera de usar gradientRadius?

PD. He añadido mi fondo mediante programación utilizando un GradientDrawable y estoy obteniendo los resultados deseados. Utilicé GradientDrawable.setGradientRadius () con un valor relativo al ancho de la vista y obtengo un gradiente consistente entre dispositivos.

One Solution collect form web for “Forma Drawable gradientRadius sólo funciona en píxeles. ¿No es inútil? % De valores no funcionan”

Para trabajar con todo el tamaño de pantalla que tiene que establecer el radio en dp. Usted puede calcular px de dp por este método

  public float pxfromDp(float dp) { return dp * getResources().getDisplayMetrics().density; } 

Así, por ejemplo, desea establecer GradientDrawable.setGradientRadius(pxfromDp(7));

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.