Эффект пульсации иногда не появляется
Я определил рисоваемость и задал ее как фон для фона списка элементов списка. Он почти отлично работает, но эффект пульсации иногда не появляется при нажатии.
Вот код для тиражирования пульсаций:
<?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_activated="true">
<shape><solid android:color="?android:attr/colorButtonNormal"/>
</shape>
</item>
<item>
<shape><solid android:color="@android:color/transparent"/>
</shape>
</item>
</selector>
</item>
</ripple>
И у меня есть ящик для навигации, который использует этот чертеж в качестве фона для элементов ящика:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="@dimen/navigation_menu_height"
android:orientation="horizontal"
android:background="@drawable/listItemBackground">
....
</RelativeLayout>
Однако каждый раз, когда я открываю приложение, выбранный по умолчанию элемент не показывает эффект ряби, когда я нажимаю его. Но после того, как я выберу другой элемент, а затем снова его выберем, все будет хорошо.
Я использую точно то же самое для другого почти такого же ListView, за исключением того, что режим выбора несколько. И на этот раз элементы не будут показывать эффект пульсации при нажатии, пока они будут выбраны.
В другом спискеView, который не указывает режим выбора, только первый элемент показывает эффект пульсации, а другие ведут себя так же, как и в более ранних версиях Android.
Я действительно не знаю, как я могу заставить его работать для всех сценариев. возможно, действительно ли это относится к режиму выбора ListView?
==== ИЗМЕНИТЬ ====
Я просто добавил свойство drawSelectorOnTop для всех этих трех listViews, и теперь первые две проблемы очищаются. Однако для третьего он теперь выглядит следующим образом:
Эффект пульсации хорош для всех предметов, кроме первого, который показывает две ряби! Один из них начинается с того, где мой палец нажимает, а другой всегда начинается с середины!
==== ИЗМЕНИТЬ СНОВА ====
Хорошо, теперь я настраиваю drawable, чтобы переместить активированный статус за пределы пульсации node вместе с атрибутом drawSelectorOnTop для списка, проблема теперь полностью исчезла.
Ответы
Ответ 1
ОК, После некоторых попыток и ошибок я наконец-то заработал.
Сначала переместите активированное состояние из пульсации node:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<shape>
<solid android:color="?android:attr/colorButtonNormal"/>
</shape>
</item>
<item>
<ripple android:color="?android:attr/colorControlHighlight">
<item>
<shape>
<solid android:color="@android:color/transparent"/>
</shape>
</item>
</ripple>
</item>
</selector>
После этого установите для drawSelectorOnTop значение true для ListView, в котором используется шаблон drawable as item.
Теперь эффект пульсации может работать отлично.
Ответ 2
В моем случае эффект пульсации работает после первого щелчка, но для первого щелчка он не работает для меня. Изменили файл селектора фона с android: state_activated = "true" и в main.xml android: clickable = "true" , тогда он отлично работает на все времена.
selector.xml(под res\drawable\selector.xml)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/card_bg_pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:state_activated="true" android:drawable="@drawable/card_bg_focused" android:state_enabled="true" android:state_focused="true"/>
<item android:state_activated="true" android:drawable="@drawable/card_bg_selected" android:state_enabled="false" android:state_selected="true"/>
</selector>
В activity_main.xml
<com.mysample.RecyclingImageView
android:id="@+id/imageview_overlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/selector"
android:clickable="true" />