Ich möchte die a ListView
in Android nach Anzahl der Pixel scrollen. Zum Beispiel möchte ich die Liste 10 Pixel nach unten scrollen (so dass das oberste Element der Liste die obersten 10 Pixelzeilen enthält).
Ich dachte, die offensichtlich sichtbaren Methoden scrollBy
oder scrollTo
auf ListView würden die Aufgabe erledigen, aber sie tun es nicht, stattdessen scrollen sie die ganze Liste falsch (Tatsächlich gibt die getScrollY
immer Null zurück, obwohl ich habe die Liste mit meinem Finger gescrollt.)
Was ich mache ist, dass ich Trackball-Ereignisse aufnehme und die Listenansicht reibungslos durch die Bewegung des Trackballs scrollen möchte.
Die unterstützte Methode zum Scrollen eines ListView
Widgets ist:
mListView.smoothScrollToPosition(position);
Da Sie jedoch ausdrücklich erwähnt haben, dass Sie die Ansicht vertikal versetzen möchten, müssen Sie Folgendes aufrufen:
mListView.setSelectionFromTop(position, yOffset);
Beachten Sie, dass Sie auch smoothScrollByOffset(yOffset)
verwenden können. Es wird jedoch nur auf API & gt; = 11
Wenn Sie sich die Quelle für die Methode scrollListBy () ansehen, die in API 19 hinzugefügt wurde, sehen Sie, dass Sie die Paketbereichs trackMotionScroll
-Methode verwenden können.
Hier ist ein Code aus meiner ListView
Unterklasse. Es kann leicht angepasst werden, damit es im Aktivitätscode verwendet werden kann.
getListItemsHeight()
gibt die gesamte Pixelhöhe der Liste zurück und füllt ein Array mit vertikalen Pixel-Offsets jedes Elements. Während diese Information gültig ist, gibt getListScrollY()
die aktuelle vertikale Pixel-Bildlaufposition zurück, und scrollListToY()
scrollt die Liste zur Pixelposition.
Ändert sich die Größe oder der Inhalt der Liste, muss getListItemsHeight()
erneut aufgerufen werden.