欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

ViewPager 滑动一半的判断方法以及左滑右滑判断实例

程序员文章站 2023-11-06 20:26:46
做项目的时候,会碰到用viewpager + fragments去实现多页滑动。有些时候需要完成:界面在滑动到一半或是一半以上的时候,需要把title之类的切换到下一个页面...

做项目的时候,会碰到用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;
    }
  }

以上这篇viewpager 滑动一半的判断方法以及左滑右滑判断实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。