ViewPager子View滑动事件冲突解决

转载 2016年05月30日 16:34:56

事件分发:public boolean dispatchTouchEvent(MotionEvent ev)

Android事件以隧道方式逐层向下传递。事件首先由dispatchTouchEvent方法分发,分发逻辑如下:

    return true;由该dispatchTouchEvent方法消费并且停止分发。

    return false;返回给父view的onTouch方法处理

    return super.dispatchTouchEvent(ev);有当前view的onInterceptTouchEvent()拦截处理。

 事件拦截:public boolean onInterceptTouchEvent(MotionEvent ev)

当前view拦截到事件后,处理流程如下:

    return false;表示放行由当前view的子view的dispatchTouchEvent分发处理。

    return true或return super.onInterceptTouchEvent()表示拦截该事件,由该View的Ontouch方法处理。

事件响应:public boolean onTouchEvent(MotionEvent ev)

    return true表示消费。

    return false或return super.onTouch()则此事件传递给上层View的onTouch方法处理。

此上是笔者关于Android事件分发的一些小总结。

回到上面的问题,ViewPager中子View的滑动冲突问题,笔者这里遇到的问题是ViewPager的View中嵌套一个广告条,广告条是需要左右滑动的,这样广告条的滑动事件和ViewPager很明显会缠上冲突。笔者这里用到的方法是,在广告条组件中添加此方法。

@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        getParent().requestDisallowInterceptTouchEvent(true);
        return super.dispatchTouchEvent(ev);
    }


这里dispatchTouchEvent方法对事件进行分发,根据上面的总结很明显是分发当前的onInterceptTouchEvent(),然后分发给当前view的onTouchEvent由此处理滑动事件。同时

getParent().requestDisallowInterceptTouchEvent(true);


这句话告诉父控件此事件你就不要拦截了,由我子view自己进行处理即可。这样即可解决此冲突问题。

相关文章推荐

Android 笔记 ViewPager的滑动与子view内部滑动事件的冲突问题

ViewPager 与子view的滑动冲突在上一次笔记中建设了一个可以滑动的photoView,显示图片,可以放大,滑动大部分时候这个自定义View会和ViewPager一起使用。也就是我们通常看到...

防止viewpager和子view滑动冲突(ScrollView嵌套webview,Listview嵌套Listview 滑动事件冲突)

做项目总有那么些操蛋的需求 (界面上含有webview 和输入框等  要求输入法弹起时整个界面能滑动,同时webview也能滑动)输入法弹出 界面滑动可以在布局最外边添加ScrollView来实现 (...
  • NN955
  • NN955
  • 2014年04月04日 11:01
  • 13910

SwipeRefreshLayout与ViewPager滑动事件冲突源码分析及解决办法

问题描述: 开发中发现,SwipeRefreshLayout的下拉刷新与ViewPager的左右滑动存在冲突,导致ViewPager的左右滑动不灵敏。 原因分析: 通过查看ViewPager的源代...
  • iugg22
  • iugg22
  • 2016年07月28日 08:51
  • 259

解决view 滑动事件冲突(实战篇-内部拦截法)

说明:本文用的方法是(内部拦截法)首先说下一个普遍的需求: 这个需求很普遍;像今日头条,网易新闻什么的都是这样 1:底部有四个按钮点击可以切换;左右滑可以切换(不用想用viewpager) 2:...

Android view 滑动事件冲突解决方法(理论篇)

1.外部拦截法: 通过父容器拦截处理,如果父容器需要就拦截,如果父容器不需要就不拦截交给子view;主要是修改父容器的 onInterceptTouchEvent 方法,伪代码如下:@Ov...

自定义View事件拦截机制(自定义viewGroup和外部法解决滑动冲突)

view事件的分发机制,和滑动冲突的处理

View的事件分发机制和滑动冲突解决方案

View的事件分发机制 View的事件分发机制说白了就是点击事件的传递,也就是一个Down事件,若干个Move事件,一个Up事件构成的事件序列的传递。 当你手指按了屏幕,点击事件就会遵循A...

安卓两个竖直方向滑动的view嵌套,解决事件冲突

转自:http://blog.csdn.net/tyk0910/article/details/53414299d 留着以后复习 最近在重新学习Android自定义View这一块的内容,遇...

Android View的事件分发机制和滑动冲突解决方案

这篇文章会先讲Android中View的事件分发机制,然后再介绍Android滑动冲突的形成原因并给出解决方案。(供自己学习) 1、View的事件分发机制 View的事件分发机制说...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewPager子View滑动事件冲突解决
举报原因:
原因补充:

(最多只允许输入30个字)