博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android开发]使用ViewPagerIndicator开源库处理其中事件分发机制
阅读量:2439 次
发布时间:2019-05-10

本文共 1194 字,大约阅读时间需要 3 分钟。

这里写图片描述

首先我先说一下我的UI框架,主界面是RadioGroup+ViewPager,另外还有一个侧滑是Fragment+ViewPager,然后我又在侧滑菜单的ViewPager上加了一个开源库ViewPagerIndicator,但是我发现ViewPagerIndicator上的Tab是不可以滑动的,我一想应该就是事件分发机制,所以我在ViewPagerIndicator的源码TabPageIndicator中重写了dispatchTouchEvent方法:

/**     * 事件分发, 请求父控件及祖宗控件不要拦截事件     */    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        getParent().requestDisallowInterceptTouchEvent(true);// 用getParent去请求        return super.dispatchTouchEvent(ev);    }

这样ViewPagerIndicator上的Tab就可以滑动了,顺便在网上查里一些资料,介绍一下AndroidTouch事件传递机制:

android系统中的每个ViewGroup的子类都具有下面三个和TouchEvent处理密切相关的方法:

1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent

2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent

3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

我们可以看一下ACTION_DOWN事件处理流程:

这里写图片描述

说明:

首先触摸事件发生时(ACTION_DOWN),由系统调用Activity的dispatchTouchEvent方法,分发该事件。根据触摸事件的坐标,将此事件传递给out的dispatchTouchEvent处理,out则调用onInterceptTouchEvent 判断事件是由自己处理,还是继续分发给子View。此处由于out不处理Touch事件,故根据事件发生坐标,将事件传递给out的直接子View(即middle)。

Middle及Center中事件处理过程同上。但是由于Center组件是clickable 表示其能处理Touch事件,故center中的onInterceptTouchEvent方法将事件传递给center自己的onTouchEvent方法处理。至此,此Touch事件已被处理,不继续进行传递。

参考网站:

你可能感兴趣的文章
shell中常用的工具(转)
查看>>
使用MySQL内建复制功能来最佳化可用性(转)
查看>>
一个比较vista的vista主题for rf5.0fb(转)
查看>>
推荐一款 Linux 上比较漂亮的字体(转)
查看>>
在Linux中添加新的系统调用(转)
查看>>
Fedora Core 5.0 安装教程{下载}(转)
查看>>
把ACCESS的数据导入到Mysql中(转)
查看>>
shell里边子函数与主函数的实例(转)
查看>>
Linux中MAXIMA符号运算软件的简介(转)
查看>>
银行选择Linux 则无法回避高成本(转)
查看>>
上网聊天需要防范的几大威胁(转)
查看>>
[分享]后门清除完全篇(转)
查看>>
用php在linux下连接mssql2000(转)
查看>>
让你的Linux支持WEB修改密码(转)
查看>>
MYSQL的master/slave数据同步配置(转)
查看>>
一个完整的ftp远程批量shell(转)
查看>>
Vsftpd匿名无法上传,配置如下,帮忙找下原因,谢谢~!(转)
查看>>
crontab命令简介(转)
查看>>
C++中的静态联编和动态联编介绍(转)
查看>>
带有农历的日历(QT版本1752-2100)(转)
查看>>