2016-07-16 25 views
7

Geri dönüştürücüm için yatay düzen yöneticisi kullanıyorum. Geri dönüştürücüye ihtiyacım var Sonraki görünümde: bir öğeye tıkladığınızda - bu konuma smoothScrool yapın ve tat öğesini geri dönüştürücünün merkezine yerleştirin (mümkün ise, örneğin 10 öğeden 20).RecyclerView SmoothScroll'u merkeze yerleştirin. android

Yani smoothScrollToPosition ile ilgili bir sorunum yok, ama RecyclerView'ın merkezine göre öğenin nasıl eklenir ???

Teşekkürler!

cevap

35

Evet bu aletlerin RecyclerView.SmoothScroller yöntemi ile

mümkündür 'onTargetFound'. LinearSmoothScroller ile LinearLayoutManager içinde özel olarak

/** 
* Called when the target position is laid out. This is the last callback SmoothScroller 
* will receive and it should update the provided {@link Action} to define the scroll 
* details towards the target view. 
* @param targetView The view element which render the target position. 
* @param state   Transient state of RecyclerView 
* @param action  Action instance that you should update to define final scroll action 
*      towards the targetView 
*/ 
abstract protected void onTargetFound(View targetView, State state, Action action); 

public class CenterLayoutManager extends LinearLayoutManager { 

    public CenterLayoutManager(Context context) { 
     super(context); 
    } 

    public CenterLayoutManager(Context context, int orientation, boolean reverseLayout) { 
     super(context, orientation, reverseLayout); 
    } 

    public CenterLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @Override 
    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { 
     RecyclerView.SmoothScroller smoothScroller = new CenterSmoothScroller(recyclerView.getContext()); 
     smoothScroller.setTargetPosition(position); 
     startSmoothScroll(smoothScroller); 
    } 

    private static class CenterSmoothScroller extends LinearSmoothScroller { 

     CenterSmoothScroller(Context context) { 
      super(context); 
     } 

     @Override 
     public int calculateDtToFit(int viewStart, int viewEnd, int boxStart, int boxEnd, int snapPreference) { 
      return (boxStart + (boxEnd - boxStart)/2) - (viewStart + (viewEnd - viewStart)/2); 
     } 
    } 
} 

İyi şanslı

+2

mükemmel, teşekkürler – AnswerZhao

+1

'' computeScrollVectorForPosition geçersiz kılmalıdır 'LinearSmoothScroller uzanır()' – Ninja

+0

çalıştı kusursuz –

İlgili konular