ViewPager 滑動一半的判斷方法以及左滑右滑判斷


做項目的時候,會碰到用viewpager + fragments去實現多頁滑動。有些時候需要完成:界面在滑動到一半或是一半以上的時候,需要把title之類的切換到下一個頁面。這個時候僅僅依賴Viewpager的接口是不能判斷,這里提供一個方法:判斷viewpager是左滑還是右滑,同時對滑過一半的時候(這個參數可以調),進行相關操作。

  //定義兩個變量,這個兩個變量是表示滑動時候,positionOffset 是從大到
  //小的變化,還是從小到大的變化。用於在滑動時候,避免多次調用一個方法
  private boolean isSmallToBig = true;
  private boolean isBigToSmall = false;

   //記錄上一次滑動的positionOffsetPixels值
   private int lastValue = -1;
   @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (positionOffset != 0) {
            mCurrentPage = position;
            boolean isLeft = true;
            if (lastValue >= positionOffsetPixels) {
                //右滑
                isLeft = false;
            } else if (lastValue < positionOffsetPixels) {
                //左滑
                isLeft = true;
            }
            setIndiactorView(positionOffset,isLeft);
        }
        lastValue = positionOffsetPixels;

    }

    private void setIndiactorView(float positionOffset,boolean isLeft) {
       
       //設定滑動的邊界,這里設置的滑動到一半
        float radiusOffsetHead = 0.5f;
        //如果滑動小於一半,通過isSmallToBig這個變量來避免多次調用
       // initIndicatorView 方法
        if (positionOffset <= radiusOffsetHead && !isSmallToBig) {

            initIndicatorView(mCurrentPage);
            isSmallToBig = true;
            isBigToSmall = false;

        } else if (positionOffset > radiusOffsetHead && !isBigToSmall) {
          //超過一半。如果是左滑,就-1,如果是右滑,就+1
            int currnt  = isLeft ? mCurrentPage + 1 : mCurrentPage - 1;
            initIndicatorView(currnt);
            isBigToSmall = true;
            isSmallToBig = false;
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM