嵌套viewpager触摸的事件分发事件处理
来源:互联网 发布:c语言将字符存入字符串 编辑:程序博客网 时间:2024/06/06 07:03
现在有一个需求:
有一个模块:使用了viewpager技术,有三个页面组成(该viewpager称为A),可以通过滑动切换
如图所示:
但是在第一个页面中,添加了一个广告轮播图,也是使用viewpager组件(称为B),设想是该广告轮播图也是可以滑动,但是和页面的滑动切换互不干扰
此时就出现问题了
当手指想要滑动广告轮播图的时候,该广告轮播图的点击事件被页面的A消费掉了,页面进行了切换而不是轮播图进行切换(但实际需求是要求轮播图切换)
解决的思路:当点击事件发生在轮播图控件的时候,就通知B的父控件A,我需要消费该点击事件,你不要干扰我
此时需要把轮播图用到的viewpager改写成自定义控件
代码:
/** * 新闻轮播图ViewPager * * @author liangjian * */public class NewsViewpager extends ViewPager {/** 触摸时按下的点 **/PointF downP = new PointF();/** 触摸时当前的点 **/PointF curP = new PointF();OnSingleTouchListener onSingleTouchListener;public NewsViewpager(Context context, AttributeSet attrs) {super(context, attrs);}public NewsViewpager(Context context) {super(context);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {// TODO Auto-generated method stub// 当拦截触摸事件到达此位置的时候,返回true,// 说明将onTouch拦截在此控件,进而执行此控件的onTouchEventreturn true;}@Overridepublic boolean onTouchEvent(MotionEvent arg0) {// TODO Auto-generated method stub// 每次进行onTouch事件都记录当前的按下的坐标curP.x = arg0.getX();curP.y = arg0.getY();if (arg0.getAction() == MotionEvent.ACTION_DOWN) {// 记录按下时候的坐标// 切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变downP.x = arg0.getX();downP.y = arg0.getY();// 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰getParent().requestDisallowInterceptTouchEvent(true);}if (arg0.getAction() == MotionEvent.ACTION_MOVE) {// 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰getParent().requestDisallowInterceptTouchEvent(true);}if (arg0.getAction() == MotionEvent.ACTION_UP) {if ((curP.x - downP.x <= 10 && curP.x - downP.x >= -10)&& (curP.y - downP.y <= 10 && curP.y - downP.y >= -10)) {onSingleTouch();return true;}}return super.onTouchEvent(arg0);}/** * 单击 */public void onSingleTouch() {if (onSingleTouchListener != null) {onSingleTouchListener.onSingleTouch();}}/** * 创建点击事件接口 * * @author liangjian * */public interface OnSingleTouchListener {public void onSingleTouch();}public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {this.onSingleTouchListener = onSingleTouchListener;}}
0 0
- 嵌套viewpager触摸的事件分发事件处理
- ViewPager嵌套ViewPager,的事件分发机制!
- android触摸事件的分发和处理
- Android触摸事件的分发处理
- Android触摸事件的分发、拦截、处理
- 触摸事件的分发与处理
- 触摸事件的分发机制
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- 在viewpager中嵌套fragment再嵌套viewpager的事件分发问题解决
- android 屏幕触摸事件的分发与处理
- android 屏幕触摸事件的分发与处理
- 处理ViewPager嵌套ViewPager的滑动事件冲突
- 处理ViewPager嵌套ViewPager的滑动事件冲突
- Android触摸事件分发与处理
- android触摸事件分发与处理简述
- android触摸事件分发与处理简述
- 事件的分发处理
- Android触摸事件传递机制及viewpager嵌套fragment冲突处理
- iOS "The sandbox is not in sync with the Podfile.lock"解决方案
- Jquery Moblie 从入门到精通 1
- 一个完整的安装程序实例—艾泽拉斯之海洋女神出品(五) --补遗 (已补充第三部分完整版)
- ubuntu12.04连接服务器的时候出现错误“terminate called after throwing an instance of 'std::runtime_error' what(”
- CentOS Linux 升级内核步骤和方法
- 嵌套viewpager触摸的事件分发事件处理
- hibernate 通用泛型DAO
- how tomcat works 总结 二
- Linux服务器磁盘维护命令
- 通达OA 一个请假工作流突然转交异常的处理(图文)
- 手机主叫的信道流程与Modem Log简单分析
- ROracle各种命令用法
- 四步轻松升级CentOS内核
- maven在Eclipse中的使用