2017-02-20 118 views
1

我有這個回收站視圖作爲一個自動收報機,自動滾動首先正常工作,但經過一段時間它變得奇怪(來回)和回收視圖卡住一個項目沒有平滑的滾動,任何人都可以幫助我。水平回收站視圖自動滾動錯誤

這是我的佈局管理器:

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

回答

0

解決了,我調整了自動滾屏功能:

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