45

Ho un pulsante immagine che non risponde con un'animazione al tocco quando si fa clic perché si tratta di un'immagine statica a differenza dei normali pulsanti sul lecca-lecca che hanno l'effetto di ripple incorporato. Mi piacerebbe aggiungere l'effetto di sfioramento del disegno del materiale all'immagine ma non riesco a trovare un modo per implementarlo. Posso impostare un filtro colorato sull'immagine ma non è l'effetto a catena. Un esempio di ciò che sto cercando di fare è quando registri un'immagine di copertina di un album in Google Play Music e un'ombra si muove attraverso l'immagine.Applicazione del disegno del materiale Toccare Ripple su ImageButton?

risposta

146

Per ancora migliore risultato:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/ic_button" 
    android:background="?attr/selectableItemBackgroundBorderless" 
/> 
+6

Questa è la risposta migliore: grazie alla sensazione circolare e all'effetto a catena, grazie. – ElliotM

+2

amo questa risposta! – grAPPfruit

+0

Come si inverte l'effetto per l'uso su uno sfondo scuro? –

19

Si può solo aggiungere uno sfondo al vostro ImageButton in questo modo:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@android:drawable/btn_dialog" 
    android:background="?android:attr/selectableItemBackground" /> 
+0

Cosa succede se ho già un drawable come sfondo? – JohannaNoobie

-1

O, in alternativa, se ci si rivolge API 21+, utilizzare backgroundTint :

<ImageButton 
    android:backgroundTint="@color/white" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/ic_button" 
    style="@style/Widget.AppCompat.ImageButton"/> 
+0

questa risposta non funziona. – JohannaNoobie

0

ho avuto buone risposte da i.shadrin (here) e Nicolar s (here).

La differenza tra le loro risposte è che ?attr/selectableItemBackgroundBorderless può darti un android.view.InflateException, quindi la soluzione è ?android:attr/selectableItemBackground.

FWIW, non so perché accade l'eccezione, perché la prima risposta ha funzionato bene in tutti i miei vecchi progetti, ma nel mio progetto recente non (forse perché il tema dell'app = android:Theme.Material?).

La cosa strana che stava accadendo è che, sebbene l'effetto complessivo è stato dimostrato che era fuori di delimitazione del ImageButton, quindi la soluzione è:

  • Per utilizzare la android:foreground="?android:attr/selectableItemBackgroundBorderless" invece di android:background="?android:attr/selectableItemBackgroundBorderless"

Spero che ti aiuti se stai affrontando lo stesso.

Problemi correlati