来自 澳门新葡亰 2019-11-27 16:48 的文章
当前位置: 澳门新葡亰app > 澳门新葡亰 > 正文

同风度翩翩打字与印刷log,可是本人依旧加了多

生机勃勃、要做成什么

接手叁个品类,有贰个难点亟待纠正:轮播图不可能手动滑动,手动滑动轮播图只会触发侧滑菜单。

  bs端的轮播控件千千万,有的甚至能看做二个独立的库来支付,所涉嫌到的机能也是缤纷多彩。相对来讲,cs端的轮播用得相当的少,作者这边只是简短的做了个能满意平常须求的轮播,在档案的次序中凑会凑会还是能的。先给两张图,看看最终的功用:

 

澳门新葡亰官网APP 1

嫌疑:viewpager控件(轮播图卡塔尔国的触摸事件被SlidingMenu控件(侧滑菜单,非第三方项目,乃是上个开辟职员自定义的卡塔 尔(英语:State of Qatar)拦截了。

澳门新葡亰官网APP 2

 

  如图,整个结构正是左右箭头、尾部小点以致内同三大片段。纵然是回顾版本,可是自己仍然加了多少个小成效:是或不是自动开头轮播、轮播间距、内容是或不是居中对齐、代码调控当前页码。整个逻辑也就200多行代码,笔者就不多做教授了,感兴趣的能够去拉取开源代码:

依靠这一个推测,作者自定义贰个ViewPager,重写dispatchTouch伊芙nt、onInterceptTouch伊夫nt和onTouch伊夫nt,分别在此多个艺术中打字与印刷log;

重写SlidingMenu的dispatchTouch伊芙nt、onInterceptTouch伊芙nt和onTouchEvent,雷同打字与印刷log。

 

重复编译运行,手滑轮播图,log如下:

澳门新葡亰官网APP 3澳门新葡亰官网APP 4

06-08 09:52:08.394 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:0
06-08 09:52:08.395 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:0
06-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.441 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:2
06-08 09:52:08.442 19424-19424/com.parkingmore E/SlidingMenu: ACTION_MOVE dx:15.473999
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: ACTION_MOVE getCurrentItem():1
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:2
06-08 09:52:08.442 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/SlidingMenu: onInterceptTouchEvent ev:2
06-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: dispatchTouchEvent ev:3
06-08 09:52:08.459 19424-19424/com.parkingmore E/RollViewPager: onInterceptTouchEvent ev:3
06-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.477 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.495 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.515 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.533 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.551 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.574 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.594 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.595 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.611 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.612 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:2
06-08 09:52:08.622 19424-19424/com.parkingmore E/SlidingMenu: onTouchEvent ev:2
06-08 09:52:08.623 19424-19424/com.parkingmore E/SlidingMenu: dispatchTouchEvent ev:1

View Code

从log中可以看看,该起来,仍可以将滑动事件传递给ViewPager,之后,就被SlidingMenu拦截了。那么些log证实了那几个估算是科学的。

 

知情了缘由就好杀绝了,小编以后要思考的是:要实现如何的法力。

 

预期效应:能够健康滑动轮播图,当轮播图在率先张时,能够滑到侧滑菜单。

澳门新葡亰官网APP, 

网络有人分享过相像的标题。笔者这里也借鉴了一下。

 

先来促成率先个功能:能够通常滑动轮播图。

澳门新葡亰app, 

能够设三个全局变量:public static boolean mRollViewPagerTouching;

用来表示是不是在触摸轮播图。

 

在自定义ViewPager中,判定是不是在触摸轮播图

澳门新葡亰官网APP 5澳门新葡亰官网APP 6

public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_DOWN:
                MyApplication.mRollViewPagerTouching = true;
                break;
            case MotionEvent.ACTION_UP:
                MyApplication.mRollViewPagerTouching = false;
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

View Code

在SlidingMenu中,做出如下管理

澳门新葡亰官网APP 7澳门新葡亰官网APP 8

public boolean onInterceptTouchEvent(MotionEvent ev) {
        if (MyApplication.mRollViewPagerTouching){
            return false;
        }
        return super.onInterceptTouchEvent(ev);
    }

View Code

 

再一次编写翻译运营,可以不奇怪滑动轮播图,可是当轮播图在首先张时,不能够滑到侧滑菜单。

 

于今来做第一个功用:当轮播图在率先张时,能够滑到侧滑菜单。

此地有多个地点要留神:1.当轮播图在率先张时;2.是因为自身的侧滑菜单是在侧边,需求手指向右滑动步入侧滑菜单,所以,第二个标准,应该是右滑。

在以上的底子上,改过自定义ViewPager代码

澳门新葡亰官网APP 9澳门新葡亰官网APP 10

public boolean dispatchTouchEvent(MotionEvent ev) {
        //在触发时回去到起始坐标
        float x = ev.getX();
        switch (ev.getAction()) {
            case MotionEvent.ACTION_MOVE:
                //获取到距离差
                float dx = x - downX;
                //防止是按下也判断
                if (Math.abs(dx) > 8) {
                    //通过距离差判断方向
                    if (dx > 0) {
                        //                                "右";
                        if (getCurrentItem() == 0) {
                            MyApplication.mRollViewPagerTouching = false;
                        } else {
                            MyApplication.mRollViewPagerTouching = true;
                        }
                    } else {
                        //                                "左";
                        MyApplication.mRollViewPagerTouching = true;
                    }
                }
                break;
            case MotionEvent.ACTION_DOWN:
                //将按下时的坐标存储
                downX = x;
                MyApplication.mRollViewPagerTouching = true;
                break;
            case MotionEvent.ACTION_UP:
                MyApplication.mRollViewPagerTouching = false;
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

View Code

 

重新编写翻译运行,成功完成预期功用。

 

ps:轻巧的效果,轻松的分享。

 

本文由澳门新葡亰app发布于澳门新葡亰,转载请注明出处:同风度翩翩打字与印刷log,可是本人依旧加了多

关键词: