文档章节

ViewPager子View滑动事件冲突解决

 风过后
发布于 2015/08/23 17:53
字数 443
阅读 7832
收藏 14

事件分发: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自己进行处理即可。这样即可解决此冲突问题。

© 著作权归作者所有

粉丝 1
博文 17
码字总数 16917
作品 0
成都
私信 提问
加载中

评论(3)

风过后 博主

引用来自“Emotiona”的评论

多谢,解决了我的问题
不客气,共同学习
E
Emotiona
多谢,解决了我的问题
Sardonyxyu
Sardonyxyu
谢谢
viewpager跟HorizontalScrollView,listview冲突的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35959554/article/details/72629399 这几天做到一个小qpp,发现一个严重的问题,因为主要布局是一个H...

浪克oo
2017/05/22
0
0
一起学Android之ViewPager

本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用。 概述 ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)PageAdapter...

Alan.hsiang
01/27
0
0
ViewPager如何既能左右滑动又能实现缩放

ViewPager如何实现基恩呢个左右滑动,又能实现缩放,,现在我能在viewPager左右滑动加载fragment,可是我同事需要实现ViewPager检测手势事件实现缩放,,是不是存在事件冲突问题。该如何解决...

一首动情的歌
2014/10/18
1K
1
ViewPager 嵌套 ViewPager 问题

ViewPager的子View中又添加了一个ViewPager ,子View中的ViewPager不能滑动,请问有没有解决方案,谢谢!

hyxf
2012/10/13
1K
1
viewpager+viewpager+scrollview+gridview

刚开始有一个父viewpager,后来在viewpager里面放了一个子viewpager还有一个gridview在同一个页面(子viewpager在上并且添加了点击事件,Gridview在下面),出现了滑动还有显示的问题,后来在...

KongSyp
2015/07/11
777
1

没有更多内容

加载失败,请刷新页面

加载更多

Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
3分钟前
1
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
50分钟前
6
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
51分钟前
9
0
Wifiphisher —— 非常非常非常流氓的 WIFI 网络钓鱼框架

编者注:这是一个非常流氓的 WIFI 网络钓鱼工具,甚至可能是非法的工具(取决于你的使用场景)。在没有事先获得许可的情况下使用 Wifiphisher 攻击基础网络设施将被视为非法活动。使用时请遵...

红薯
今天
52
1
MongoDB 4 on CentOS 7安装指南

本教程为CentOS x86_64 7.x操作系统下,MongoDB Community x86_64 4.2(GA)安装指南。 安装方式一:yum repo在线安装 [此方式较为简单,官方推荐] Step1:新建MongDB社区版Yum镜像源。 # vim ...

王焱君
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部