水平Recycler视图自动滚动错误

时间:2017-02-20 08:47:04

标签: android android-recyclerview smooth-scrolling

我有这个回收站视图,作为自动收报机,自动滚动工作起初很好,但经过一段时间它变得奇怪(来回)和回收者视图卡在一个没有平滑滚动的项目,可以有人帮帮我。

这是我的布局经理:

LinearLayoutManager layoutManager = new LinearLayoutManager(HomeActivity.this, LinearLayoutManager.HORIZONTAL, false) {
        @Override
        public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
            LinearSmoothScroller smoothScroller = new  LinearSmoothScroller(HomeActivity.this) {
                private static final float SPEED = 5500f;// Change this value (default=25f)
                @Override
                protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                    return SPEED / displayMetrics.densityDpi;
                }
            };
            smoothScroller.setTargetPosition(position);
            startSmoothScroll(smoothScroller);
        }

    };
    rvTicker.setLayoutManager(layoutManager);

这是我的自动滚动功能:

public void autoScroll(){
    speedScroll = 0;
    handler = new Handler();
    runnable = new Runnable() {
        int count = 0;
        @Override
        public void run() {
            if(count == tickerAdapter.getItemCount())
                count = 0;
            if(count < tickerAdapter.getItemCount()){
                rvTicker.smoothScrollToPosition(++count);
                handler.postDelayed(this,speedScroll);
            }
        }
    };
    handler.postDelayed(runnable,speedScroll);
}

1 个答案:

答案 0 :(得分:1)

已解决,我调整了自动滚动功能:

public void autoScroll(){
    speedScroll = 0;
    handler = new Handler();
    runnable = new Runnable() {
        int count = 0;
        @Override
        public void run() {
            if(count == tickerAdapter.getItemCount())
                count = 0;
            else {
                if(count < tickerAdapter.getItemCount()){
                    rvTicker.smoothScrollToPosition(++count);
                    handler.postDelayed(this,speedScroll);
                }else {
                    count = 0;
                }
            }
            Log.wtf("tickerAdapter.getItemCount()", tickerAdapter.getItemCount()+"");
            Log.wtf("count", count+"");
            Log.wtf("++count", ++count+"");
            Log.wtf("==============","=============");
        }
    };
    handler.postDelayed(runnable,speedScroll);
}