Android 无处理程序postdelayed和setcurrentitem的Viewpager自动滚动

Android 无处理程序postdelayed和setcurrentitem的Viewpager自动滚动,android,scroll,android-viewpager,android-recyclerview,automatic-differentiation,Android,Scroll,Android Viewpager,Android Recyclerview,Automatic Differentiation,我想在不使用setCurrentItem()函数的情况下实现自动viewpager滚动。因为当我将setcurrentitem()与handler.postdelayed()一起使用时,它在设置下一项后保持不变。我想要一个像recyclerview一样的平滑卷轴。是否可以使用viewpager实现此功能?您可以使用viewpager实现此功能。最好的旋转木马是使用recylerview。但是,您需要首先自定义LayoutManager,以像旋转木马一样降低速度 创建回收视图 CustomLayo

我想在不使用setCurrentItem()函数的情况下实现自动viewpager滚动。因为当我将setcurrentitem()与handler.postdelayed()一起使用时,它在设置下一项后保持不变。我想要一个像recyclerview一样的平滑卷轴。是否可以使用viewpager实现此功能?

您可以使用viewpager实现此功能。最好的旋转木马是使用recylerview。但是,您需要首先自定义LayoutManager,以像旋转木马一样降低速度

创建回收视图

CustomLayoutManager layoutManager = new CustomLayoutManager(getActivity());
layoutManager.setSpeed(1500f);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
然后创建CustomLayoutManager以更改recylcerview滚动的速度

public class CustomLayoutManager extends LinearLayoutManager {
    private float MILLISECONDS_PER_INCH = 1100f;
    private Context mContext;

    public CustomLayoutManager(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, final int position) {

        LinearSmoothScroller smoothScroller = new LinearSmoothScroller(mContext) {
                    @Override
                    public PointF computeScrollVectorForPosition(int targetPosition) {
                        return CustomLayoutManager.this.computeScrollVectorForPosition(targetPosition);
                    }

                    @Override
                    protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                        return MILLISECONDS_PER_INCH/displayMetrics.densityDpi;
                    }
                };

        smoothScroller.setTargetPosition(position);
        startSmoothScroll(smoothScroller);
    }

    public void setSpeed(float speed){
        this.MILLISECONDS_PER_INCH = speed;
    }
}
然后在活动或片段中,创建Runnable

Runnable runNews = new Runnable() {
        @Override
        public void run() {
            try {
                top_new_rview.smoothScrollToPosition(++counter);
                handler.postDelayed(this, replay);
            } catch (Exception e) {
                handler.removeCallbacks(runNews);
                onError(getActivity(), e);
            }
        }
    };