45

Ich habe eine Bildschaltfläche, die nicht mit einer Touch-Animation reagiert, wenn sie angeklickt wird, da es sich um ein statisches Bild handelt, im Gegensatz zu regulären Tasten auf Lollipop, die mit dem eingebauten Ripple-Effekt ausgestattet sind. Ich möchte dem Bild den Material Design-Ripple-Touch-Effekt hinzufügen, finde aber keine Möglichkeit, es zu implementieren. Ich kann einen Farbfilter über das Bild setzen, aber das ist nicht der Welleneffekt. Ein Beispiel für das, was ich versuche, ist, wenn Sie ein Albumcover-Bild in Google Play Musik halten und eine Schattenrunzel über das Bild bewegt.Wenden Sie Material Design Touch Ripple auf ImageButton an?

Antwort

146

Für noch besseres Ergebnis:

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

Dies ist die bessere Antwort - danke für das kreisförmige Gefühl und den Welleneffekt. – ElliotM

+2

ich liebe diese Antwort! – grAPPfruit

+0

Wie invertieren Sie den Effekt für den Einsatz auf dunklem Hintergrund? –

19

Sie können nur einen Hintergrund zu Ihrem Image wie folgt hinzu:

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

Was passiert, wenn ich bereits einen Hintergrund als Hintergrund habe? – JohannaNoobie

-1

Oder alternativ, wenn Sie API 21+, verwenden Sie Targeting sind 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

diese Antwort funktioniert nicht. – JohannaNoobie

0

ich habe gute Antworten von i.shadrin (here) und Nicolar s (here).

Der Unterschied zwischen ihren Antworten ist, dass ?attr/selectableItemBackgroundBorderless Ihnen eine android.view.InflateException geben kann, so dass die ?android:attr/selectableItemBackground die Lösung ist.

FWIW, ich weiß nicht, warum die Ausnahme passiert, weil die erste Antwort in allen meinen alten Projekten gut funktionierte, aber in meinem letzten Projekt nicht (vielleicht weil das App-Thema = android:Theme.Material?).

Das Merkwürdige, das geschah, ist, dass, obwohl die sich allmählich ausbreitende Wirkung gezeigt wurde, war es das Image out-begrenzende, so ist die Lösung:

  • Um

die android:foreground="?android:attr/selectableItemBackgroundBorderless" statt android:background="?android:attr/selectableItemBackgroundBorderless" zu verwenden Ich hoffe, es hilft Ihnen, wenn Sie vor dem gleichen stehen.