Android RecyclerViewのスライドリスニング

4839 ワード

1 RecyclerViewのスライドリスニング
1.1 RecyclerViewスライドリスニングの設定

mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

  • 1.2スライドリスニングコールバック方法説明
    1.3 RecyclerViewのスライド方向を判断する
  • onScrollStateChanged(RecyclerView recyclerView,int newState)この方法は、RecyclerViewのスライド状態が変化すると
  • を呼び出す.
    対応するパラメータnewStateには3つの状態があり、公式にはこのように説明されています.
        /**
         * The RecyclerView is not currently scrolling.
         * @see #getScrollState()
         */
        public static final int SCROLL_STATE_IDLE = 0;
    
        /**
         * The RecyclerView is currently being dragged by outside input such as user touch input.
         * @see #getScrollState()
         */
        public static final int SCROLL_STATE_DRAGGING = 1;
    
        /**
         * The RecyclerView is currently animating to a final position while not under
         * outside control.
         * @see #getScrollState()
         */
        public static final int SCROLL_STATE_SETTLING = 2;
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

  • すなわち、newState=0の場合、RecyclerViewが停止状態でnewState=1とnewState=2の場合、RecyclerViewがスライド状態で異なるのは、0—>1,2の場合、RecyclerViewが静止状態でスライド状態となり、その後1-0のスライド状態が静止となる(調用方法m H o m e DateRecyclerView.smoothScrollToPosition(currentPostion);などの方法でトリガーされ、2->0スライド状態が静止状態になる(左右スライドRecyclerView動的に徐々に終了)
  • onScrolled(RecyclerView recyclerView,int dx,int dy)この方法は、RecyclerViewがスライドを開始するときにリアルタイムで
  • にコールバックする.
    パラメータdxdyは、それぞれRecyclerViewがスライド中にx軸方向(横スライド)とY軸方向(縦スライド)とのずれ量dx>0で右スライドdx<0で左スライド
    dy<0上向きスライドdy>0下向きスライド
     
    2 RecyclerViewのスライド距離取得
    このメソッドは、RecyclerViewのスライドリスニングで呼び出され、RecyclerViewのスライド距離を継続的に取得できます.
    //mMTrainLinearLayoutManager   Recyclerview        
    if (mMTrainLinearLayoutManager != null) {
           //  RecyclerView                     
           int position = mMTrainLinearLayoutManager.findFirstVisibleItemPosition();
           //          itemView 
           View firstVisiableChildView = mMTrainLinearLayoutManager.findViewByPosition(position);
           //           
           int itemHeight = firstVisiableChildView.getHeight();
           //    Recyclerview    
           int flag = (position) * itemHeight - firstVisiableChildView.getTop();
    
           LogUtils.d("scroll " + dx + "  " + dy + " flag " + flag);
       }