android中对点击事件拦截

对于点击事件是从父布局向子布局传递,对点击事件的拦截是在父布局做拦截消费,不在传递给子布局控件消费,下面的例子是viewpager里对手指下滑的事件做拦截,不在传递到fragment中处理,代码如下:

 float downY = 0;
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction() & MotionEvent.ACTION_MASK;
        int currentItem = super.getCurrentItem();
        float upY;
        float decY;
        if (currentItem == 1) {//如果当前展示的是首页,就对滑动事件做拦截,其他页面不处理
            if (HomeFragment.getHomeScrollHeight() == 0) {//首页的recyclerView是到达顶部,对滑动事件拦截,让父控件消费该滑动
                if (action == MotionEvent.ACTION_DOWN) {
                    downY = ev.getY();//手指按下的y轴坐标
                }
//由于监听不到手指抬起的动作,所以这里监听的是手指滑动
                if (action == MotionEvent.ACTION_MOVE) {
                    upY = ev.getY();//手指抬起的y轴坐标
                    if (downY != upY) {
                        decY = downY - upY;
                        if (decY < 0) {//坐标差小于0表示下滑
                            return true;//true表示对当前事件做拦截,父控件不把该事件分发到子控件
                        }
                    }
                }
            }

        }
        return super.onInterceptTouchEvent(ev);
    }

完结。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容