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

 

posted @ 2016-07-30 09:43  shaotine  阅读(6971)  评论(2编辑  收藏  举报