Подтвердить что ты не робот

Эффект пульсации иногда не появляется

Я определил рисоваемость и задал ее как фон для фона списка элементов списка. Он почти отлично работает, но эффект пульсации иногда не появляется при нажатии.

Вот код для тиражирования пульсаций:

<?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 для списка, проблема теперь полностью исчезла.

4b9b3361

Ответ 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" />