【问题标题】:Viewpager automatic scroll without handler postdelayed and setcurrentitemViewpager 自动滚动没有处理程序 postdelayed 和 setcurrentitem
【发布时间】:2016-12-01 00:02:53
【问题描述】:

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

【问题讨论】:

    标签: android scroll android-viewpager android-recyclerview automatic-differentiation


    【解决方案1】:

    您可以使用 ViewPager 来完成。最好的轮播是使用recyclerview。但是你需要先自定义 LayoutManager 来像轮播一样减慢速度

    创建回收站视图

    CustomLayoutManager layoutManager = new CustomLayoutManager(getActivity());
    layoutManager.setSpeed(1500f);
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    

    然后创建CustomLayoutManager来改变recyclerview滚动的速度

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2011-05-20
      相关资源
      最近更新 更多