Intereting Posts
Использование тестовой платформы Android Как определить обратные вызовы в Android? Ошибка: остановка сервера ADB с ошибкой (код -1) {Установка API – Android SDK} Android Studio не может импортировать модули после обновления Как совместно использовать изображение + текст, используя ACTION_SEND в android? Биллинг Android – в файле Security.java должен быть base64EncodedPublicKey закодированным значением? Как правильно удалить дополнение (или маржу?) Вокруг кнопок в Android? Как использовать mkdirs в потоковом безопасном режиме в Java? Youtube встраивает видео, не работающее в веб-браузере. Что случилось с этим кодом? Определение размеров изображений для различных размеров / плотности экрана Android Android Gradle Не удалось зарезервировать достаточно места для кучи объектов Android: переключение камеры при нажатии кнопки OnOptionsItemSelected не получает вызов при использовании пользовательского вида действий Удаляются ли Android AlarmManagers после обновления приложения? Android Linkify text – Spannable Text in Single Text View – Как твит Twitter

Векторный клипарт

У меня VectorDrawable состоит из 9 прямоугольников. Это определяется как XML в папке drawables. У меня этот набор как фон для ImageView, который я объявил в xml. android:src="@drawable/squares00" Я хотел бы изменить цвет одного или нескольких квадратов программно во время выполнения. Я знаю, что есть способ сделать это, используя анимацию VectorDrawable. Но мне было интересно, есть ли более простой способ доступа к моему vectorDrawable в java, обновлению его свойств (установка одного или нескольких цветов заливки для прямоугольников), а затем обновление фона изображения с помощью обновленного VectoDrawable. Моя цель – Android API 21 (леденец)

Solutions Collecting From Web of "Векторный клипарт"

Вкратце:

  1. У вас нет прямого доступа к внутренним элементам в VectorDrawable .
  2. AnimatedVectorDrawable имеет доступ только к внутренним элементам.
  3. Используйте AnimatedVectorDrawable, чтобы имитировать то, что вам нужно.

Длинный:

1. У вас нет доступа

Глядя на исходный код для VectorDrawable, мы увидим , что информация о внутренних элементах хранится во внутреннем классе private VectorDrawableState . Единственный способ выставить внутренний элемент по имениgetTargetByName , но, к сожалению, он является закрытым (по умолчанию) – вы не можете его использовать (если только вы не используете отражение).

2. AnimatedVectorDrawable имеет доступ только

getTargetByName используется только AnimatedVectorDrawable , как мы можем найти, ища способы использования метода.

3. Используйте AnimatedVectorDrawable

Итак, теперь, когда мы видим, что это единственный доступный параметр, например, мы можем попробовать следующее изменить цвет элемента «rect2» от белого до черного:

change_color.xml:

 <set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="0" android:propertyName="fillColor" android:valueFrom="@color/white" android:valueTo="@color/black"/> </set> 

animation.xml:

 <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vectordrawable" > <target android:name="rect2" android:animation="@anim/change_color" /> </animated-vector> 

И используйте описанный здесь подход.

Заметка

Если приведенное выше значение по-прежнему не является для вас вариантом, вы можете попробовать следующее:

  • Скопируйте весь VectorDrawable и настройте его (не проверено)
  • Используйте отражение для getTargetByName чтобы получить внутренний элемент. Сначала вам нужно будет сначала mutate объект.

Используйте эту библиотеку для прямого доступа к внутренним элементам. Он реализует этот ответ