web-dev-qa-db-ja.com

プログラムでrecyclerViewをスクロールする方法は?

横に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全体をスライドさせるだけで、アイテムをスクロール(スライド)したいだけです。これどうやってするの?

10

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にスクロールされることを確認する必要があります。 ScrollListenerRecyclerViewを付けて、最後のアイテムが表示されるようにします。

15
ADM

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);
1

これを使って..

 int top = 0;
 recyclerView.smoothScrollToPosition(top); // for top

 int bottom = recyclerView.getAdapter().getItemCount()-1;
 recyclerView.smoothScrollToPosition(bottom);
0
Santanu Sur