android Effetto a catena su un oggetto RecyclerView contenente ImageView




android-recyclerview ripple (4)

Possiamo avvolgere RecyclerView Item all'interno di FrameLayout e impostare android:foreground property ad esso. Acquista il seguente link per i dettagli. Funziona abbastanza bene per me.

Ho un RecyclerView che espande il seguente elemento della griglia:

<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>

Ma l'effetto a SquareImageView's non appare a meno che non imposti la visibilità SquareImageView's su invisibile. Sembra che l'effetto a SquareImageView sia disegnato sotto SquareImageView . Come posso renderlo disegnato su SquareImageView ?


aggiungi sotto il codice al tuo layout genitore

android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground" 

se vuoi effetto ripple personalizzato aggiungi questo ripple_custom.xml nel tuo 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>

per supportare la versione precedente, aggiungere ripple_custom.xml in 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>

SquareImageView sta riempiendo l'intero spazio (la width è match_parent e l' height è wrap_content ) e SquareImageView riceve l'evento click.

Ciò che ha funzionato nel mio caso era impostare lo stato cliccabile di tutti gli oggetti in RelativeLayout su false:

android:clickable="false"

Assicurati che RelativeLayout gestisca l'evento click nella tua attività. Nel mio codice ho impostato RelativeLayout su una view v e ho impostato un onClick Listener su di esso per gestire il CheckBox all'interno del mio elemento List.

v.setOnClickListener(this);

Spero che questo aiuti chiunque lo legge.


Se hai un CardView + ImageView
basta inserire in CardView

android:focusable="true"
android:foreground="?android:attr/selectableItemBackground"

E per RelativeLayout + ImageView
Inserisci in RelativeLayout

android:clickable="true"
android:focusable="true"
android:background="?attr/selectableItemBackground" 

O

android:focusable="true"
android:background="?attr/selectableItemBackground"

Questo codice ha funzionato per me





ripple