#android #material-design #android-5.0-lollipop #ripple #rippledrawable
#Android #материал-дизайн #android-5.0-lollipop #пульсация #rippledrawable
Вопрос:
У меня есть кнопки с другим рисунком 9patch png
в качестве фона. В настоящее время кнопки управляются с помощью selector
, которые выглядят примерно так:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/focused" android:state_focused="true"/>
<item android:drawable="@drawable/default"/>
</selector>
Для Android Lollipop у них есть RippleDrawable
для эффекта касания, который выглядит примерно так:
<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight">
<item>
...
</item>
</ripple>
Что касается нового эффекта пульсации касания:
1: Могу ли я установить draw9patch в качестве фона для RippleDrawable
?
2: Как мне совместить вышеупомянутые два разных xml, которые я хочу использовать в Material design? Должен ли я использовать новую папку / макет xml для нового RippleDrawable
?
Комментарии:
1. Я не думаю, что вы можете применить 9png в качестве фона. Вы можете применить цвет к вашему RippleDrawable.
Ответ №1:
1) Да. Смотрите документацию для RippleDrawable для получения более подробной информации о том, как составляются слои, но в основном вы хотите:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:drawable="@drawable/yourninepatch" />
</ripple>
Или, чтобы также обрабатывать отключенное состояние чистым способом, вы можете захотеть:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item>
<selector>
<item android:state_enabled="false">
<nine-patch
android:src="@drawable/yourninepatch"
android:alpha="?android:attr/disabledAlpha" />
</item>
<item>
<nine-patch android:src="@drawable/yourninepatch" />
</item>
</selector>
</item>
</ripple>
2) Да, вы должны поместить свой ripple XML в drawable-v21.
Комментарии:
1. Я получил ошибку,
Element ripple must be declared
когда я поместил <ripple …> xml в папку values-v21 .2. Извините, я имел в виду каталог drawable-v21.
3. есть какой-нибудь способ сделать это для всех объектов рисования автоматически? значит, нам не нужно создавать ад копирования и вставки?
4. Прочитайте ответ и комментарии еще раз. Он доступен в drawables-v21.
5. Нет, вам нужен только один элемент ripple. Обычно вы оставляете значение colorControlHighlight по умолчанию, но вы также можете установить цвет в список состояния цвета, если вам абсолютно необходимо иметь разные цвета пульсаций при нажатии и фокусировке. Имейте в виду, что вы увидите пульсацию только тогда, когда элемент включен и нажат или сфокусирован.