Эффект пульсации работает только с первым элементом ListView

Я реализовал эффект пульсации, введенный в Lollipop в ListView. Но он работает только для первого элемента ListView. Я выполнил ответы этого вопроса, но я не могу установить эффект пульсации.

У меня есть папка ripple_background.xml в drawable-v21:

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@android:color/background_dark">
    <item>
        <shape
            android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

Макет my ListView существует в следующем порядке:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listSettings"
        android:listSelector="@android:color/transparent"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:divider="@color/price_item_divider"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="true"/>
</LinearLayout>

и элементы, заполненные внутри ListView, следующие (settings_item_row.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >

    <ImageView
        android:id="@+id/imageViewIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:paddingRight="10dp" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/imageViewIcon"
        android:paddingRight="10dp"
        android:textColor="@android:color/black"
        android:textSize="18sp" />

</RelativeLayout>

Благодарим за помощь!

Ответ 1

Я столкнулся с такой же проблемой и нашел легкое решение этой проблемы. Не нужно устанавливать какой-либо фон в какой-либо элемент списка или ListView. Просто установите android:listSelector на вашу рябь, выбитую в ListView.

Итак, ListView в моей деятельности выглядит следующим образом:

<ListView
        android:id="@+id/myListView"
        ...
        android:listSelector="@drawable/ripple" />

и моя масштабируемость пульсации определяется как:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/rippleColour">
    <item android:drawable="@color/backgroundColour"/>
</ripple>

Ответ 2

Это случилось со мной, и я изменил значение clickable на true, чем это сработало.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  ....
  android:background="@drawable/touchselector"
  android:clickable="true">
  ....
</LinearLayout>

Ответ 3

Просто эта проблема и исправлена. Удалите фон рябины, который можно извлечь из отдельных видов элементов списка, а затем установите фон в самом ListView. Кроме того, добавьте drawSelector в ваш элемент списка и удалите поле из списка ListView.

Это исправление работает только для того, чтобы иметь один цвет фона для ListView.

Просмотр списка элементов:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/ripple_background"
    android:padding="16dp" >

И ваш ListView:

<ListView
    android:id="@+id/listSettings"
    android:listSelector="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:divider="@color/price_item_divider"
    android:dividerHeight="1dp"
    android:background="@color/__Your color here__
    />

Ответ 4

У меня есть идеальное решение. Нет необходимости добавлять в макет фона. просто оставьте свои макеты как есть. Теперь сосредоточьтесь на ListView в List View вы можете добавить свой собственный фон, и вы можете использовать ListSelecter для применения темы пульсации.

С помощью ListSelector в listview Эффект Ripple будет работать над каждым элементом в списке, и вы также можете указать фон по умолчанию для listItems (отдельно в представлении списка).