Android 仿IOS边缘滑动事件监听

Posted Wastrel_xyz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 仿IOS边缘滑动事件监听相关的知识,希望对你有一定的参考价值。

直接上代码,原理是利用Activity的dispatchTouchEvent进行全局触摸事件拦截,并且通过标志位拦截事件,避免在触发边缘侧滑时引起其他滑动控件的滑动。


    //从dispatch拦截事件
  @Override
    public boolean dispatchTouchEvent(MotionEvent ev) 
        return gestureHandler.doEventFling(ev) || super.dispatchTouchEvent(ev);
    


    class GestureHandler 
        //屏幕宽高
        int sWidth = DisplayUtil.getInstance().getWidth();
        int sHeight = DisplayUtil.getInstance().getHeight();
        //按下的点
        PointF down;
        //Y轴滑动的区间
        float minY, maxY;
        //按下时的时间
        long downTime;
        //边缘判定距离,
        double margin = sWidth * 0.035;
        //Y轴最大区间范围,即Y轴滑动超出这个范围不触发事件
        double height = sHeight * 0.2;
        //X轴最短滑动距离 X轴滑动范围低于此值不触发事件
        double width = sWidth * 0.5;
        //是否处于此次滑动事件
        boolean work = false;

        public boolean doEventFling(MotionEvent event) 
            switch (event.getActionMasked()) 
                case MotionEvent.ACTION_DOWN:
                    //记录下按下的点
                    downTime = System.currentTimeMillis();
                    down = new PointF(event.getX(), event.getY());
                    minY = maxY = down.y;
                    //判定是否处于边缘侧滑
                    if (down.x < margin || (sWidth - down.x) < margin) work = true;
                    break;
                case MotionEvent.ACTION_MOVE:
                    //记录滑动Y轴区间
                    if (work)
                        if (event.getY() > down.y) 
                            maxY = event.getY();
                         else 
                            minY = event.getY();
                        
                    break;
                case MotionEvent.ACTION_UP:
                    if (work) 
                        handle(new PointF(event.getX(), event.getY()));
                        work = false;
                        return true;
                    
                    work = false;
            
            //如果当前处于边缘滑动判定过程中,则消费掉此事件不往下传递。
            return work;
        

        public boolean handle(PointF up) 
            long upTime = System.currentTimeMillis();
            float tWidth = Math.abs(down.x - up.x);
            if (maxY - minY < height && tWidth > width && (upTime - downTime) / tWidth < 2.5) 
                //起点在左边
                if (down.x < margin) 
                    left();
                    return true;
                
                //起点在右边
                if ((sWidth - down.x) < margin) 
                    right();
                    return true;
                
            
            return false;
        


        public void left() 
           //处理左边缘滑动事件
        


        public void right() 

        
    

以上是关于Android 仿IOS边缘滑动事件监听的主要内容,如果未能解决你的问题,请参考以下文章

android仿IOS,滑动隐藏底部ScrollView

Android之自己定义(上方标题随ViewPager手势慢慢滑动)

如何监听android的屏幕滑动停止事件

Android仿IOS ViewPager滑动进度条

[Android-2A] -仿IOS微信滑动删除_SwipeListview左滑删除例子

移动端touch触屏滑动事件滑动触屏事件监听!