Mam przycisk obrazu, który nie reaguje animacją dotykową po kliknięciu, ponieważ jest to obraz statyczny, w przeciwieństwie do zwykłych przycisków na Lollipopie, które mają wbudowany efekt tętnienia. Chciałbym dodać efekt ripple touch do obrazu, ale nie mogę znaleźć sposobu na jego wdrożenie. Mogę ustawić filtr kolorów na obrazie, ale to nie jest efekt tętnienia. Przykładem tego, co próbuję zrobić, jest trzymanie obrazu okładki albumu w Muzyce Google Play i poruszanie się po nim cieni.
96
android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"
(działa na <API 21). Więcej rozwiązań znajdziesz na stackoverflow.com/q/28605031/599535 .Możesz po prostu dodać tło do swojego ImageButton w następujący sposób:
<ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/btn_dialog" android:background="?android:attr/selectableItemBackground" />
źródło
Otrzymałem dobre odpowiedzi od i.shadrin ( tutaj ) i Nicolars ( tutaj ).
Różnica między ich odpowiedziami polega na tym, że
?attr/selectableItemBackgroundBorderless
mogą one dać ci odpowiedźandroid.view.InflateException
, więc?android:attr/selectableItemBackground
jest to rozwiązanie.FWIW, nie wiem, dlaczego zdarza się wyjątek, ponieważ pierwsza odpowiedź działała dobrze we wszystkich moich starych projektach, ale w moim ostatnim nie (może dlatego, że motyw aplikacji =
android:Theme.Material
?).Dziwne było to, że chociaż efekt tętnienia został pokazany, wykraczał poza ImageButton, więc rozwiązanie jest następujące:
android:foreground="?android:attr/selectableItemBackgroundBorderless"
zamiastandroid:background="?android:attr/selectableItemBackgroundBorderless"
Mam nadzieję, że pomoże ci to, jeśli napotkasz to samo.
źródło
Jeśli masz już tło i nie chcesz go zmieniać, użyj pierwszego planu;
<ImageButton android:layout_width="60dp" android:layout_height="match_parent" android:background="@drawable/preview_in_4k_background" android:src="@drawable/ic_full_screen_24px" android:layout_marginLeft="5dp" android:foreground="?attr/selectableItemBackgroundBorderless" android:layout_column="2"/>
źródło