android - ViewPager 监听左右滑动

说明:

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

 


 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beluga_白鲸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值