Эффект пульсации работает только с первым элементом 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 (отдельно в представлении списка).