Ich arbeite mit einem RecyclerView und einem entsprechenden LinearLayoutManager. Ich habe einige benutzerdefinierte Scroll-Funktionen zu einem Teil meiner App hinzugefügt, wo ich ein benutzerdefiniertes Header-Objekt zusammen mit dem Scroll des RecyclerView nach diesem Projekt modellieren würde: https://github.com/boxme/ParallaxHeaderViewPager (das ListView anstelle von RecyclerView verwendet).RecyclerView LinearLayoutManager computeVerticalScrollOffset() liefert keinen korrekten Wert
Ich lief jedoch in einem seltsamen Problem. Es würde für eine Weile gut laufen, aber dann würde es ein paar hundert Pixel springen. Ich habe log-Anweisungen hinzugefügt, um den Offset zu sehen, der von LinearLayoutManager.computeVerticalScrollOffset() berechnet wurde, während ich so oft scrollte, dass der Offset zufällig von 320 auf 1200 sprang, dann würde er den Offset von diesem Punkt aus berechnen.
Siehe meine Antwort unten, wie ich das gelöst habe!
Anstatt dies zu tun, könnten Sie 'computeVerticalScrollOffset',' extent' und 'range' für eine billigere und geeignetere Lösung überschreiben. – yigit
Das ist eine großartige Idee! Ich war etwas skeptisch gegenüber RecyclerView und LayoutManager-Methoden, da die Klassen noch relativ neu sind und sich in der Zukunft signifikant ändern könnten. Ich stimme zu, meine Lösung war auf der Hacker-Seite, aber zumindest sollte es noch funktionieren, wenn sich die Klasse in der Zukunft ändert :) – rakoonise
Diese Methoden sind Spiegel von View, also sehr, sehr unwahrscheinlich, zu ändern. Wenn wir eine öffentliche Methode ändern, versuchen wir, sie möglichst rückwärtskompatibel zu machen – yigit