6

Gram teraz z RecyclerView i natknąłem się na następujący problem. Kiedy RecyclerView's LinearLayoutManager podejmuje decyzję o tym, czy widok wyszedł z ekranu (aby mógł być recyklerem), nie bierze pod uwagę widoku translationY.RecyclerView nie respektuje tłumaczenia podczas recyklingu wyświetleń

W zasadzie, kiedy przewijam w górę i mam widoki z pozytywem translationY, LinearLayoutManager uważa, że ​​widok jest poza ekranem, ale w rzeczywistości jest nadal widoczny (ponieważ jest tłumaczony w dół).

Zauważyłem, że sposób, w jaki LinearLayoutManager podejmuje tę decyzję - to patrząc na getDecoratedBottom(View), więc starałem się przesłonić getDecoratedBottom(View), aby również uwzględnić tłumaczenie. Niestety, całkowicie zakłóca to układ - ta metoda jest również używana, gdy układamy nowe elementy, więc nowe elementy otrzymują dodatkowe tłumaczenie (na istniejące).

Czy istnieje łatwy sposób, aby powiedzieć LinearLayoutManager, aby zobaczyć translation atrybut, gdy podejmuje decyzję o recyklingu widoku bez ponownego wdrażania LayoutManager od zera?

+0

Znalazłeś rozwiązanie problemu? –

+0

@ZakharovRoman yeah ... Rozwidlona implementacja LinearLayoutManager i nieco zmodyfikowała jej logikę, aby uwzględnić również tłumaczenie. Ale nic "po wyjęciu z pudełka" nie mogło rozwiązać problemu. –

+0

ok, spróbuję. dzięki –

Odpowiedz

0

Może być pomocny komuś, znalazłem rozwiązanie.

Po pierwsze próbowałem użyć animacji Tłumacz bez powodzenia. Ale właśnie stworzyłem nową klasę rozszerzającą ItemDecoration. Następnie zmień getItemOffsets() i ustaw odpowiednie przesunięcie na Rect. LayoutManager poprawnie oblicza te przesunięcia. Osiągnięty wynik jest na załączonym obrazie.

+0

dobrze, nie jestem pewny, że zadziała w moim przypadku, ponieważ zmienię tłumaczenie na każdej ramce. Naprawdę nie wiem tak często o implikacjach zmiany przesunięcia dekoracji. –