Pracuję z RecyclerView i odpowiednim LinearLayoutManager. Dodałem niektóre niestandardowe funkcje przewijania do części mojej aplikacji, w których tłumaczyłem niestandardowy obiekt nagłówka wraz ze zwinięciem RecyclerView wzorowanym na tym projekcie: https://github.com/boxme/ParallaxHeaderViewPager (który wykorzystuje ListView zamiast RecyclerView).RecyclerView LinearLayoutManager computeVerticalScrollOffset() nie zwraca poprawnej wartości
Wpadłem jednak na dziwny problem. Przez jakiś czas przewijał się dobrze, ale potem przeskoczyłby kilkaset pikseli. Dodałem wyciągi z dziennika, aby zobaczyć przesunięcie obliczone przez LinearLayoutManager.computeVerticalScrollOffset(), gdy przewijałem wystarczająco dokładnie, przesunięcie losowo przeskakiwało z około 320 na 1200, a następnie kontynuowałoby obliczanie przesunięcia odpowiednio od tego punktu.
Zobacz poniżej odpowiedź na pytanie, jak to rozwiązałem!
Zamiast tego, można zastąpić 'computeVerticalScrollOffset',' extent' i 'range', aby uzyskać tańsze i bardziej odpowiednie rozwiązanie. – yigit
To świetny pomysł! Byłem trochę nieufny wobec nadpisywania metod RecyclerView i LayoutManager, ponieważ klasy są wciąż stosunkowo nowe i mogą się znacznie zmienić w przyszłości. Zgadzam się, że moje rozwiązanie było bardziej nieprzyjemne, ale przynajmniej powinno nadal działać, jeśli klasa zmieni się w przyszłości :) – rakoonise
Te metody są lustrami z widoku tak bardzo mało prawdopodobne, aby się zmienić. Ponadto, gdy zmieniamy metodę publiczną, staramy się ją w miarę możliwości kompatybilować wstecznie – yigit