说明:

        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.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {//当前页                Log.e("资产", "选择位置:" + position);                iv_oval_1.setImageResource(R.drawable.ic_oval_no);                iv_oval_2.setImageResource(R.drawable.ic_oval_no);                iv_oval_3.setImageResource(R.drawable.ic_oval_no);                if (position == 0) {                    iv_oval_1.setImageResource(R.drawable.ic_oval_yes);                } else if (position == 1) {                    iv_oval_2.setImageResource(R.drawable.ic_oval_yes);                } else if (position == 2) {                    iv_oval_3.setImageResource(R.drawable.ic_oval_yes);                }            }            @Override            public void onPageScrollStateChanged(int state) {            }        });

onPageScrolled(int arg0,float arg1,int arg2)    ,当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到

调用。其中三个参数的含义分别为:

arg0 :当前页面,及你点击滑动的页面

arg1:当前页面偏移的百分比

arg2:当前页面偏移的像素位置   

 

onPageSelected(int arg0) :   此方法是页面跳转完后得到调用,表示当前页

 

 

方法二:

重写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,造成不起作用。

 


 

ฅ՞•ﻌ•՞ฅ ~ 厚着脸皮要个赞赏哈 ~ ฅ՞•ﻌ•՞ฅ

更多相关文章

  1. 安全新手入坑——HTML标签
  2. Nginx系列教程(四)| 一文带你读懂Nginx的动静分离
  3. ViewGroup为什么不会调用onDraw
  4. android捕获Home键的方法
  5. 下载、更新Android(安卓)SDK慢的解决方案
  6. Android(安卓)获取window状态栏和标题栏的高度
  7. 背景透明的 Dialog
  8. Android异步操作UI界面的四种方法(载至网络 )
  9. Android的 Activity生死周期

随机推荐

  1. list_item 们
  2. 学习资源
  3. TextView实现电话、网址链接
  4. 如何在Android中取得当前进程名
  5. 拦截短信,不让系统发通知
  6. android linux 基础知识总结
  7. 《H5 App开发》判断当前环境是Android还
  8. Android中的Menu
  9. Android(安卓)- Intent - 传递数据
  10. Android(安卓)获取设备信息