Радиальный градиент для разных точек на дюйм - PullRequest
16 голосов
/ 14 декабря 2011

Я создаю радиальный градиент как:

 <?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>

Но в поле GradientRadius с использованием таких значений, как sp и dip, выдается ошибка. Есть ли способ указать радиус и масштаб для mdpi и автоматически масштабировать его в остальной части плотности экрана, или это необходимо для создания нескольких рисуемых файлов?

Ответы [ 4 ]

22 голосов
/ 06 сентября 2012

Так что, если вы сделаете это:

Рез / рисуем / 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>

Рез / значения-MDPI / dimens.xml

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

</resources>

Рез / значения-ИПЧР / dimens.xml

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

</resources>

Что вы думаете?

8 голосов
/ 17 июля 2014

Старый вопрос, но этот ответ показывает высокий рейтинг в Google, и я считаю, что альтернативный подход является более масштабируемым. Вместо того, чтобы указывать измерение для каждой плотности, создайте независимое от плотности измерение из XML:

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

Поскольку мы не можем применить это непосредственно к XML-документу с радиальным градиентом, мы должны применить его из кода:

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

Это переопределяет поле android:gradientRadius, поэтому вы можете оставить это значение равным 0. Однако вы все равно не можете использовать (основанное на экране или иное) измерение%. Я применяю это к фону моего представления (для которого уже можно установить рисование градиента!), Но, конечно, это относится и к элементу src в ImageView.

0 голосов
/ 25 июня 2013

Используйте проценты, в поле android: GradientRadius.

Пример:

Для 50% радиуса, установленного на 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" />
0 голосов
/ 06 сентября 2012

В документах говорится, что вы можете указать атрибут radiusRadius в виде числа с плавающей точкой (предполагая, что это будет означать px) или в виде дроби.

Может быть дробным значением,это число с плавающей запятой, к которому добавляется% или% p, например, «14,5%».Суффикс% всегда означает процент от базового размера;необязательный суффикс% p обеспечивает размер относительно некоторого родительского контейнера.

Вы пробовали это?Это позволило бы указать размер в dp или любой другой единице в макете, и обратиться к нему отсюда.Странно, однако, что большинство размеров указаны как размеры в формате xml для рисования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...