
Ege Kuzubasioglu
Ich habe eine horizontale RecyclerView. Wenn ich die Aktivität zum ersten Mal öffne, möchte ich, dass alle Elemente in RecyclerView nach unten (in diesem Fall nach rechts) und zurück nach oben (nach links) scrollen. Ein bisschen wie eine Animation. Das Scrollverhalten sollte für den Benutzer sichtbar sein.
Ich habe versucht, es so zu machen:
Animation slideRight = AnimationUtils.loadAnimation(this, R.anim.slide_right);
Animation slideLeft = AnimationUtils.loadAnimation(this, R.anim.slide_left);
slideRight.setDuration(1000);
slideLeft.setDuration(1000);
slideRight.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
recyclerView.startAnimation(slideLeft);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
recyclerView.startAnimation(slideRight);
Animationsfolie links:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate
android:duration="200"
android:fromXDelta="-100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
Animationsfolie rechts:
<translate
android:duration="200"
android:fromXDelta="100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
Es funktioniert, aber es verschiebt nur die Recycleransicht als Ganzes, ich möchte nur die Elemente scrollen (schieben). Wie kann ich das machen?

ADM
Sie können verwenden scrollToPosition()
recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
// Here adapter.getItemCount()== child count
}
});
oder smoothScrollToPosition()
recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.smoothScrollToPosition(adapter.getItemCount()- 1);
}
});
Um wieder nach oben zu gelangen, müssen Sie die obige Methode mit dem Index 0 aufrufen. Aber zuerst müssen Sie sicherstellen, dass die RecyclerView
wird bis zum letzten gescrollt. Setzen Sie also a ScrollListener
An RecyclerView
um sicherzustellen, dass das letzte Element sichtbar ist.
Benutze das..
int top = 0;
recyclerView.smoothScrollToPosition(top); // for top
int bottom = recyclerView.getAdapter().getItemCount()-1;
recyclerView.smoothScrollToPosition(bottom);

Nikolaus Asinowitsch
Wenn Sie z. Erweitern Sie Ihren Artikel – verwenden Sie diesen Weg:
in app/build.gradle – einfügen:
implementation 'com.andkulikov:transitionseverywhere:1.7.4'
Wenn Hadle auf BindViewHolder des Adapters klicken – einfügen:
AutoTransition transitionPort = new AutoTransition();
transitionPort.setDuration(100);
transitionPort.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(@NonNull Transition transition) {
recyclerView.setEnabled(false);
recyclerView.setClickable(false);
}
@Override
public void onTransitionEnd(@NonNull Transition transition) {
recyclerView.post(() -> recyclerView.smoothScrollToPosition(position));
recyclerView.setEnabled(true);
recyclerView.setClickable(true);
}
@Override
public void onTransitionCancel(@NonNull Transition transition) {
recyclerView.setEnabled(true);
recyclerView.setClickable(true);
}
@Override
public void onTransitionPause(@NonNull Transition transition) {
}
@Override
public void onTransitionResume(@NonNull Transition transition) {
}
});
TransitionManager.beginDelayedTransition(recyclerView, transitionPort);
Funktioniert nicht, nachdem Sie andere Dinge ausprobiert haben?
Dieses ausgezeichnete Stück Code hat bei mir funktioniert
private void scrollToBottom(final RecyclerView recyclerView) {
// scroll to last item to get the view of last item
final LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
final RecyclerView.Adapter adapter = recyclerView.getAdapter();
final int lastItemPosition = adapter.getItemCount() - 1;
layoutManager.scrollToPositionWithOffset(lastItemPosition, 0);
recyclerView.post(new Runnable() {
@Override
public void run() {
// then scroll to specific offset
View target = layoutManager.findViewByPosition(lastItemPosition);
if (target != null) {
int offset = recyclerView.getMeasuredHeight() - target.getMeasuredHeight();
layoutManager.scrollToPositionWithOffset(lastItemPosition, offset);
}
}
});
}
Sie können die Zeile ändern, wenn Sie zu einem anderen Listenelement springen möchten und nicht zuletzt
final int lastItemPosition = adapter.getItemCount() - 1;
Quelle
10140900cookie-checkWie scrolle ich recyclerView programmgesteuert?yes
mit konstanter Geschwindigkeit? Wenn ja, wenn Sie Hunderte von Artikeln haben, wird es ewig dauern, wenn nicht (konstante Zeit), werden die Artikel für den Bruchteil einer Sekunde angezeigt …
– Pskink
19. Februar 2018 um 9:28 Uhr
Ich habe nur 10 Artikel, dieser Wert wird sich nicht ändern
– Ege Kuzubasioglu
19. Februar 2018 um 9:56 Uhr
also verwenden
smoothScrollToPosition()
– Pskink
19. Februar 2018 um 9:57 Uhr