Próbuję dodać efekt Ripple do elementu RecyclerView. Zajrzałem do Internetu, ale nie mogłem znaleźć tego, czego potrzebowałem. Zakładam, że ma to być efekt niestandardowy. Wypróbowałem atrybut android: background na sam RecyclerView i ustawiłem go na „? Android: selectableItemBackground”, ale to nie zadziałało .:
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:selectableItemBackground"
android:id="@+id/recyclerView"
android:layout_below="@+id/tool_bar"/>
To jest RecyclerView, do którego próbuję dodać efekt:
android
android-animation
android-recyclerview
Georgi Koemdzhiev
źródło
źródło
CardView
w tej kwestii, niż nie dotyczą tego bardziej ogólnego pytania.Odpowiedzi:
Zorientowałem się. Jedyne, co musiałem zrobić, to dodać ten atrybut:
do głównego elementu układu, który mój adapter RecyclerView jest zawyżany w następujący sposób:
Wynik:
Jeśli nadal nie możesz zobaczyć efektu tętnienia, dodaj te linie również do głównego elementu układu.
źródło
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
również, aby ta działałaJak już odpowiedzieliśmy, najprostszym rozwiązaniem jest dodanie jednego z poniższych elementów jako
RecyclerView
tła wiersza:android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
Jednak jeśli doświadczasz problemy z tą metodą lub chcesz mieć lepszą kontrolę nad kolorami, możesz wykonać następujące czynności.
Niestandardowy efekt falowania
Ta odpowiedź zaczyna się od tego prostego przykładu RecyclerView systemu Android . Będzie wyglądać jak na poniższym obrazku.
Dodaj selektor dla urządzeń starszych niż API 21
Przed API 21 (Android 5.0 Lollipop) kliknięcie
RecyclerView
elementu zmieniło kolor tła (brak efektu tętnienia). To też będziemy robić. Jeśli nadal masz użytkowników z tymi urządzeniami, są oni przyzwyczajeni do takiego zachowania, więc nie będziemy się o nich zbytnio martwić. (Oczywiście, jeśli naprawdę chcesz również dla nich efektu ripple, możesz użyć własnej biblioteki ).Kliknij
res/drawable
folder prawym przyciskiem myszy i wybierz opcję Nowy> Plik zasobów do rysowania . Nazwij tocustom_ripple
. Kliknij OK i wklej następujący kod.custom_ripple.xml
Użyłem
colorAccent
jako koloru podświetlenia dla stanu wciśniętego, ponieważ był już dostępny, ale możesz zdefiniować dowolny kolor.Dodaj efekt falowania dla urządzeń API 21+
Kliknij
res/drawable
folder prawym przyciskiem myszy i wybierz opcję Nowy> Plik zasobów do rysowania . Zadzwońcustom_ripple
ponownie. Nie klikaj OK, ale tym razem. Z listy Dostępne kwalifikatory wybierz opcję Wersja , a następnie kliknij przycisk >> i wpisz21
poziom platformy API . Teraz kliknij OK i wklej następujący kod.v21 / custom_ripple.xml
Znowu użyłem
colorAccent
koloru tętnienia, ponieważ był dostępny, ale możesz użyć dowolnego koloru. Maska ogranicza efekt tętnienia tylko do układu wierszy. Najwyraźniej kolor maski nie ma znaczenia, więc użyłem nieprzezroczystej bieli.Ustaw jako tło
W układzie głównym elementu RecyclerView ustaw tło na niestandardowe tętnienie, które utworzyliśmy.
W przykładowym projekcie , od którego zaczynaliśmy, wygląda to tak:
Skończone
Otóż to. Teraz powinieneś być w stanie uruchomić swój projekt. Dzięki tej odpowiedzi i temu filmowi na YouTube za pomoc.
źródło
Myślę, że brakuje jednego małego szczegółu.
Jeśli po dodaniu nadal nie widać efektu tętnienia,
android:background="?android:attr/selectableItemBackground"
spróbuj dodać następujące wiersze w katalogu głównym układu.Zapewnią one klikalność widoku i umożliwią efekt ripple z atrybutem tła wspomnianym powyżej
źródło
dodaj te wiersze w widoku głównym xml adaptera
źródło
Prostym i niestandardowym podejściem jest ustawienie motywu widoku, jak opisano tutaj .
some_view.xml
some_style.xml
Inne niestandardowe implementacje można znaleźć tutaj .
źródło
Używanie stylu przycisku
To działało dla mnie niezliczoną ilość razy.
Dodaj styl przycisku bez obramowania do elementu głównego układu. Nie ma potrzeby stosowania atrybutów
focusable
aniclickable
atrybutów, domyślny styl obejmuje to wszystko za Ciebie.źródło