横にrecyclerViewがあります。アクティビティを最初に開いたとき、recyclerviewのすべてのアイテムを下(この場合は右)にスクロールし、上(左)に戻します。ちょっとアニメーションみたい。スクロール動作はユーザーに表示される必要があります。
私はそれを次のようにしようとしました:
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);
アニメーションスライド左:
<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>
アニメーションスライド右:
<translate
Android:duration="200"
Android:fromXDelta="100%"
Android:fromYDelta="0%"
Android:toXDelta="0%"
Android:toYDelta="0%" />
それは動作しますが、recyclerview全体をスライドさせるだけで、アイテムをスクロール(スライド)したいだけです。これどうやってするの?
scrollTo()
を使用できます
_ recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
// Here adapter.getItemCount()== child count
}
});
_
またはsmoothScrollToPosition()
。
_recyclerView.post(new Runnable() {
@Override
public void run() {
recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);
}
});
_
再び上に移動するには、インデックス0で上記のメソッドを呼び出す必要があります。ただし、最初にRecyalerView
がlastにスクロールされることを確認する必要があります。 ScrollListener
にRecyclerView
を付けて、最後のアイテムが表示されるようにします。
exの場合、recyclerviewのアイテムを画面の中央にスクロールする必要がある場合。アイテムを展開します-この方法を使用します:
app/build.gradleに-挿入:
implementation 'com.andkulikov:transitionseverywhere:1.7.4'
hadleがアダプターのonBindViewHolderをクリックすると-挿入:
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);
これを使って..
int top = 0;
recyclerView.smoothScrollToPosition(top); // for top
int bottom = recyclerView.getAdapter().getItemCount()-1;
recyclerView.smoothScrollToPosition(bottom);