android - ViewPager 监听左右滑动

来源:互联网 发布:游戏抢红包软件 编辑:程序博客网 时间:2024/05/16 05:10

说明:

        android ViewPager 监听左右滑动,使用setOnPageChangeListener中的onPageScrollStateChanged来监听,其中onPageScrollStateChanged参数:

public void onPageScrollStateChanged(int arg0)   

此方法是在状态改变的时候调用,其中arg0这个参数有三种状态(0,1,2)。

        arg0 ==1的时辰默示正在滑动,

        arg0==2的时辰默示滑动完毕了,

        arg0==0的时辰默示什么都没做。

当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)
所以可以判断viewPager目前的状态来控制SwipeRefreshLayout是否可滑。


实现有两种方式,

方法一:

是直接用布局对象实现:

ViewPager viewPager = (ViewPager) view.findViewById(R.id.vp_huandengpian);viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){            @Override            public void onPageScrollStateChanged(int state) {                enableDisableSwipeRefresh(state == ViewPager.SCROLL_STATE_IDLE);            }        });

方法二:

重写ViewPager

    import android.content.Context;      import android.support.v4.view.ViewPager;      import android.util.AttributeSet;      import android.util.Log;            import com.meityitian.app.utils.Debug;            /**      * 重写,添加了判定滑动方向的方法      * @author zxy      *      */      public class meityitianViewPager extends ViewPager {          private boolean left = false;          private boolean right = false;          private boolean isScrolling = false;          private int lastValue = -1;          private ChangeViewCallback changeViewCallback = null;                public meityitianViewPager(Context context, AttributeSet attrs) {              super(context, attrs);              init();          }                public meityitianViewPager(Context context) {              super(context);              init();          }                /**          * init method .     */          private void init() {              setOnPageChangeListener(listener);          }                /**          * listener ,to get move direction .     */          public  OnPageChangeListener listener = new OnPageChangeListener() {              @Override              public void onPageScrollStateChanged(int arg0) {                  if (arg0 == 1) {                      isScrolling = true;                  } else {                      isScrolling = false;                  }                        Debug.infoByTag("meityitianViewPager",                          "meityitianViewPager  onPageScrollStateChanged : arg0:"                                  + arg0);                  if (arg0 == 2) {                      Debug.infoByTag("meityitianViewPager",                              "meityitianViewPager  onPageScrollStateChanged  direction left ? "                                      + left);                      Debug.infoByTag("meityitianViewPager",                              "meityitianViewPager  onPageScrollStateChanged  direction right ? "                                      + right);                      //notify ....                      if(changeViewCallback!=null){                          changeViewCallback.changeView(left, right);                      }                      right = left = false;                  }                    }                    @Override              public void onPageScrolled(int arg0, float arg1, int arg2) {                  if (isScrolling) {                      if (lastValue > arg2) {                          // 递减,向右侧滑动                          right = true;                          left = false;                      } else if (lastValue < arg2) {                          // 递减,向右侧滑动                          right = false;                          left = true;                      } else if (lastValue == arg2) {                          right = left = false;                      }                  }                  Log.i("meityitianViewPager",                          "meityitianViewPager onPageScrolled  last :arg2  ,"                                  + lastValue + ":" + arg2);                  lastValue = arg2;              }                    @Override              public void onPageSelected(int arg0) {                  if(changeViewCallback!=null){                      changeViewCallback.getCurrentPageIndex(arg0);                  }              }          };                    /**          * 得到是否向右侧滑动          * @return true 为右滑动     */          public boolean getMoveRight(){              return right;          }                    /**          * 得到是否向左侧滑动          * @return true 为左做滑动     */          public boolean getMoveLeft(){              return left;          }                    /**          *  滑动状态改变回调          * @author zxy          *     */          public interface ChangeViewCallback{              /**              * 切换视图 ?决定于left和right 。              * @param left              * @param right     */              public  void changeView(boolean left,boolean right);              public  void  getCurrentPageIndex(int index);          }                    /**          * set ...          * @param callback     */          public void  setChangeViewCallback(ChangeViewCallback callback){              changeViewCallback = callback;          }      }  

遇到的问题;

1.由于我的ViewPager和ViewPagerIndicator配合使用,这样倒是重写的ViewPager里面的setOnPageChangeListener不起作用,是因为ViewPagerIndicator会重新重写ViewPager的setOnPageChangeListener,造成不起作用。

0 0
原创粉丝点击