Эффект пульсации над элементом RecyclerView, содержащим ImageView
У меня есть RecyclerView
, который расширяет следующий элемент сетки:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/children_tile_border"
android:layout_marginTop="@dimen/children_tile_border"
android:clickable="true"
android:focusable="true"
android:background="?selectableItemBackground"
tools:ignore="RtlHardcoded">
<com.example.app.ui.widget.SquareImageView
android:id="@+id/child_picture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:layout_alignParentBottom="true"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="68dp"
android:background="@color/tile_text_background"
android:gravity="center_vertical"
android:layout_alignParentBottom="true">
..............
</LinearLayout>
</RelativeLayout>
Но эффект пульсации не появляется, если я не установил невидимость видимости SquareImageView's
. Кажется, эффект пульсации рисуется ниже SquareImageView
. Как я могу сделать его нарисованным над SquareImageView
?
Ответы
Ответ 1
добавить ниже код в родительский макет
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
если вы хотите, чтобы пользовательский эффект пульсации добавлял этот ripple_custom.xml в ваш drawable-v21
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorHighlight">
<item
android:id="@android:id/mask"
android:drawable="@color/windowBackground" />
</ripple>
для поддержки старой версии добавьте ripple_custom.xml в drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorHighlight" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
Ответ 2
Изменить:
android:background="?selectableItemBackground"
To:
android:background="?android:attr/selectableItemBackground"
И добавьте это в свой SquareImageView
android:clickable="false"
Ответ 3
Мы можем обернуть элемент RecyclerView внутри FrameLayout
и установить для него свойство android:foreground
. Оформить заказ ниже ссылка. Это работает для меня довольно хорошо.
Ответ 4
Ваш SquareImageView
заполняет все пространство (width
is match_parent
и height
is wrap_content
), и поэтому SquareImageView
получает событие click.
Что в моем случае заключалось в установке кликабельного состояния всех объектов в вашем RelativeLayout
на false:
android:clickable="false"
Просто убедитесь, что ваш RelativeLayout
обрабатывает событие click в вашей активности. В моем коде я установил RelativeLayout
в view v
и установил onClick Listener
на нем для обработки CheckBox
в моем элементе списка.
v.setOnClickListener(this);
Надеюсь, это поможет всем, кто его читает.
Ответ 5
Если у вас есть CardView + ImageView
просто вставьте в CardView
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"
И для RelativeLayout + ImageView
Вставить в RelativeLayout
android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground"
или
android:focusable="true"
android:background="?attr/selectableItemBackground"
Эти коды работали для меня
Ответ 6
Выше ответы верны. но я хочу порекомендовать использовать android: foreground вместо этого, так как он показывает пульсацию перед imageView.
В вашем корневом представлении добавьте следующее.
android:foreground="@drawable/ripple_effect_color_primary"
android:clickable="true"
android:focusable="true"
Я знаю довольно поздний ответ на такую старую ветку. Но кто знает, кто-то может найти это полезным.