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

Эффект пульсации над элементом 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?

4b9b3361

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

Я знаю довольно поздний ответ на такую старую ветку. Но кто знает, кто-то может найти это полезным.