How can i control the scrolling speed of recyclerView.smoothScrollToPosition(position)

前端 未结 5 623
感情败类
感情败类 2020-11-28 23:18

I have a recycler view... and i want a smooth scrolldown and then scrollup to it programatically to show the complete content in it to user .... And i m able to do this by<

5条回答
  •  天命终不由人
    2020-11-28 23:56

    I found an answer!

    You need to make a custom class extending [LinearLayoutManager][1] and then override the [smoothScrollToPosition][1] method. Inside, you need to create a new [LinearSmoothScroller][1] and override its calculateSpeedPerPixel method Then use that LinearSmoothScroller to complete the scroll.

    Here is my example :

    public class CustomLinearLayoutManager extends LinearLayoutManager{
            @Override
            public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
                final LinearSmoothScroller linearSmoothScroller =
                        new LinearSmoothScroller(recyclerView.getContext()) {
                            private static final float MILLISECONDS_PER_INCH = 100f;
    
                            @Override
                            public PointF computeScrollVectorForPosition(int targetPosition) {
                                return CustomLinearLayoutManager.this
                                    .computeScrollVectorForPosition(targetPosition);
                        }
    
                        @Override
                        protected float calculateSpeedPerPixel
                                (DisplayMetrics displayMetrics) {
                            return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
                        }
                    };
            linearSmoothScroller.setTargetPosition(position);
            startSmoothScroll(linearSmoothScroller);
        }
    }
    

    Assign this CustomLinearLayoutManager to your RecyclerView and you should be good to go. Let me know if I was unclear in anything. I'll be happy to help.

提交回复
热议问题