Я хочу использовать форму с возможностью рисования с радиальным градиентом в качестве фона для представления. Согласно javadoc, радиус градиента может быть задан как определенное значение (предположительно пикселей) или в процентах:
Android: gradientRadius
Радиус градиента, используемый только с радиальным градиентом.
Может быть значением с плавающей запятой, например "1.2".
Может быть дробное значение, которое является добавленным числом с плавающей запятой с% или% p, например, "14,5%". Суффикс% всегда означает процент от базового размера; дополнительный суффикс% p обеспечивает размер относительно некоторого родительского контейнера.
Исправьте меня, если я ошибаюсь, но использование значения пикселя здесь совершенно бесполезно, так как этот градиент будет полностью отличаться от одной плотности экрана к другой (проверено, и да, это верно). Я пытался использовать значения% и% p, но они вообще не работали.
Я попал в исходный код Android, чтобы посмотреть, как обрабатывается gradientRadius, и нашел это в классе 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 HA! Таким образом, все добавление% или% p действительно делит мое значение на 100. (Я проверил это, потому что документация для TypeValue.getFraction() еще более неясна). 65% стали 0,65. Имеет смысл, но не служит никакой полезной цели.
Итак, каков наилучший способ использования gradientRadius?
PS. Я добавил свой фон программно, используя GradientDrawable, и я получаю желаемые результаты. Я использовал GradientDrawable.setGradientRadius() со значением относительно ширины вида и получал согласованный градиент между устройствами.