Ich benutze einen LinearSnapHelper, um Artikel in meinem RecyclerView auf dem Bildschirm "einrasten" zu lassen (meine Karten nehmen den größten Teil des Bildschirms ein, also möchte ich, dass sie einrasten und den Bildschirm bei jedem Wischen/scrollen).Android LinearSnapHelper - Wie erhöht man die Geschwindigkeit beim Scrollen/"Fangen"?
Ich habe Probleme damit, wie man die Karten einrasten lässt schneller. Ich habe versucht, einen benutzerdefinierten LinearLayoutManager zu erstellen (und die calculateSpeedPerPixel-Methode in scrollToPosition oder smoothScrollToPosition zu bearbeiten) sowie einen benutzerdefinierten RecyclerView (und die Fling-Methode zu bearbeiten). Aber nichts beeinflusst die Geschwindigkeit, mit der Karten "einrasten".
Ich vermute das Problem ist, dass ich nicht wirklich verstehe, wie LinearSnapHelper die Karten in Position "scrollt". Es scheint nicht die Methoden scrollToPosition oder smoothScrollToPosition von LinearLayoutManager zu verwenden.
Irgendwelche Hilfe? Danke vielmals!
snapHelper = new LinearSnapHelper() {
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
View centerView = findSnapView(layoutManager);
if (centerView == null) {
return RecyclerView.NO_POSITION;
}
int position = layoutManager.getPosition(centerView);
int targetPosition = -1;
if (layoutManager.canScrollHorizontally()) {
if (velocityX < 0) {
targetPosition = position - 1;
} else {
targetPosition = position + 1;
}
}
if (layoutManager.canScrollVertically()) {
if (velocityY > 0) {
targetPosition = position + 1;
} else {
targetPosition = position - 1;
}
}
final int firstItem = 0;
final int lastItem = layoutManager.getItemCount() - 1;
targetPosition = Math.min(lastItem, Math.max(targetPosition, firstItem));
return targetPosition;
}
};
snapHelper.attachToRecyclerView(mRecyclerView);
Warum ist Ihr lineares Layout benutzerdefiniert? Haben Sie es mit dem standardmäßigen horizontalen linearen Layout probiert? – 2cupsOfTech