Ich habe eine horizontale RecyclerView-Ansicht. Wenn ich die Aktivität zum ersten Mal öffne, möchte ich, dass alle Elemente im Recycler nach unten (nach rechts in diesem Fall) und zurück nach oben (nach links) gescrollt werden. Irgendwie eine Animation. Das Bildlaufverhalten sollte für den Benutzer sichtbar sein.
Ich versuchte 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);
anim Folie 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>
anim Slide rechts:
<translate
Android:duration="200"
Android:fromXDelta="100%"
Android:fromYDelta="0%"
Android:toXDelta="0%"
Android:toYDelta="0%" />
es funktioniert zwar, aber es wird nur die Recyclingübersicht als Ganzes angezeigt. Ich möchte nur die Elemente scrollen. Wie kann ich das machen?
Sie können scrollTo()
verwenden.
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. Zuerst müssen Sie jedoch sicherstellen, dass die Variable RecyalerView
als letztes gescrollt wird. Setzen Sie also eine ScrollListener
auf RecyclerView
, um sicherzustellen, dass das letzte Element sichtbar ist.
wenn Sie zum Beispiel einen Eintrag aus der Recyclingübersicht in die Mitte des Bildschirms scrollen müssen. erweitere deinen Gegenstand - benutze diesen Weg:
in app/build.gradle - einfügen:
implementation 'com.andkulikov:transitionseverywhere:1.7.4'
wenn Sie auf BindViewHolder des Adapters klicken, fügen Sie Folgendes ein:
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);
Benutze das..
int top = 0;
recyclerView.smoothScrollToPosition(top); // for top
int bottom = recyclerView.getAdapter().getItemCount()-1;
recyclerView.smoothScrollToPosition(bottom);