Можно ли использовать GradientColor для определения градиента для заливки или штриха целиком в XML?

Я смотрел документацию для GradientColor https://developer.android.com/reference/android/R.styleable.html#GradientColor . Как определить цвет градиента в XML и применить его к векторному вектору XML?

Я пробовал в color.xml, styles.xml и в рамках векторного вектора XML.

Я получаю сообщение об ошибке «Не удалось преобразовать @ id / gradclor в ColorStateList»:

<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="120dp" android:height="120dp" android:viewportWidth="120.0" android:viewportHeight="120.0"> <path android:name="play_triangle" android:pathData="M 30 30 L 30 90 L 80 60 z" android:strokeColor="@id/gradclor" android:strokeWidth="5"/> <color android:name="@+id/gradclor" android:startColor="#FFFFFF" android:endColor="#00FFFF" android:angle="145"/> </vector> 

Или «Не удалось преобразовать #FFFFFFFF # 00FFFFFF 145 в ColorStateList» при использовании:

 <?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="120dp" android:height="120dp" android:viewportWidth="120.0" android:viewportHeight="120.0"> <path android:name="play_triangle" android:pathData="M 30 30 L 30 90 L 80 60 z" android:strokeColor="@color/GradientStrokeBorder" android:strokeWidth="5"/> </vector> 

Со следующим цветом.xml:

 <color name="GradientStrokeBorder"> <item name="android:startColor">#FFFFFF</item> <item name="android:endColor">#00FFFF</item> <item name="android:angle">145</item> </color> 

Я, наконец, заставил его работать. Функция цветного градиента еще не поддерживается в Android Studio (текущая версия версии 2.2), поэтому она не поможет вам с автозаполнением, но вместо этого отмечает метку градиента. Тем не менее, эта функция действительно работает, я успешно ее протестировал на Nexus 5X / API 24. Конечно, вам нужно использовать устройство API 24+, потому что в противном случае эта функция не поддерживается ОС.

Во-первых, вам нужно добавить файл ресурса цвета следующим образом:

 <?xml version="1.0" encoding="utf-8"?> <gradient xmlns:android="http://schemas.android.com/apk/res/android" android:startColor="#FFFFFF" android:centerColor="#0000FF" android:endColor="#00FFFF" android:angle="145" android:startX="30" android:endX="70" android:startY="30" android:endY="70" android:type="linear"/> 

Пожалуйста, обратите внимание на начальные / конечные параметры, поскольку я нашел, что они необходимы для векторных градиентов.

Поместите этот файл в папку res / color под некоторым именем. Я назвал его gradient.xml, поэтому полный путь – res / color / gradient.xml. После этого вы можете ссылаться на этот ресурс в атрибутах цвета, включая цвета векторного пути:

 <?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="120dp" android:height="120dp" android:viewportWidth="120.0" android:viewportHeight="120.0"> <path android:name="play_triangle" android:pathData="M 30 30 L 30 90 L 80 60 z" android:strokeWidth="10" android:strokeColor="@color/gradient"/> </vector> 

Обратите внимание на ссылку на цветной ресурс градиента в strokeColor. Надеюсь это поможет!

Я не уверен в этом, но согласно этому документу :

Android: strokeColor Определяет цвет, используемый для рисования контура пути. Может быть цветом или, для SDK 24+ , списком состояний цвета или градиентным цветом (см. GradientColor и GradientColorItem). Если это свойство анимировано, любое значение, заданное анимацией, переопределит исходное значение. Если это свойство не указано, контуры контуров не создаются.

Если ваш sdk <24, он должен быть только одного цвета.

С другой стороны, если ваш sdk больше 24, я думаю, что было бы beter использовать <gradient/> для заполнения вашего пути вместо <color/>