0102 触摸事件 主要方法

三者关系的伪代码:

public boolean dispatchTouchEvent(MotionEvent ev){
    boolean consume = false;
    if(onInterceptTouchEvent(ev)){
        consume = onTouchEvent(ev);
    }else{
        consume = child.dispatchTouchEvent(ev);
    }
    return consume;
}


dispatchTouchEvent()用来分发事件

Android中所有的事件都必须经过这个方法的分发,然后决定是自身消费当前事件还是继续往下分发给子控件处理

返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法影响,表示是否消耗该事件。

返回true表示不继续分发,事件被消费(事件会传递给当前控件的onTouchEvent(),这就是所谓的Intercept(拦截))。

返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。

dispatchTouchEvent()方法里面调用了onInterceptTouchEvent()和onTouchEvent()。一般不重写该方法。



onInterceptTouchEvent()用来拦截事件

如果当前View拦截了某个事件,那在同一个事件序列中,此方法不会再次调用,返回结果表示是否拦截当前事件

若返回值为True,表示拦截了事件, 则事件将终止向下(子View)传递,事件会传递到自己的onTouchEvent()。,事件由当前ViewGroup类的onTouchEvent来处理

若返回值为False传递到事件将向下传递,传递给其子View的dispatchTouchEvent();

ViewGroup类中的源码实现就是{return false;}表示不拦截该事件,;

正确的使用方法是,在此方法内仅判断事件是否需要拦截,然后返回。即便需要拦截也应该直接返回true,然后由onTouchEvent方法进行处理。



onTouchEvent():用来处理事件,消费事件


返回值决定当前控件是否消费(consume)了这个事件。尤其对于ACTION_DOWN事件,

返回true,事件由自己处理消耗,后续动作序列让其处理;表示我想要处理后续事件;

返回false,自己不消耗事件了,向上返回让其他的父view的onTouchEvent接受处理;


时间: 2024-07-29 20:13:53

0102 触摸事件 主要方法的相关文章

0102 触摸事件 其他注意事项

Activity 对 onInterceptTouchEvent(MotionEvent ev) 也就是事件拦截不进行响应. 另外需要注意的是 View 对 dispatchTouchEvent(MotionEvent ev) 和 onInterceptTouchEvent(MotionEvent ev) 的响应的前提是可以向该 View 中添加子 View, 如果当前的 View 已经是一个最小的单元 View(比如 TextView),那么就无法向这个最小 View 中添加子 View, 也

UIResponder 类中的触摸事件响应方法

touchesBegan:withEvent:-当触摸事件处于"起步阶段"(starting phase),也就是用户刚开始触碰屏幕时,系统会调用这个方法. touchesMoved:withEvent:-当用户触摸屏幕并持续在屏幕上移动手指时,系统会调用这个方法. touchesEnded:withEvent:-当用户触摸屏幕的一根手指或所有手指都从屏幕上拿开时,触摸过程就结束了,而系统此时会调用这个方法.如果在用户移动手指的过程中程序做了一些处理,那么此时应该会执行相关的清理工作.

iOS中的四中触摸事件的详解 - 平移- 捏合 - 滑动(TouchesBegan,touchesMoved,touchesEnded,touchesCancelled)

RootViewController #import "RootViewController.h" #import "TouchView.h" #import "PanView.h" #import "PinchView.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad { [super

Android好奇宝宝_08_乱侃触摸事件传递

讲解触摸事件传递原理的网上有一大把,有从源码角度讲的,有从实际例子角度讲的.我这里呢只是记录下自己的理解,讲的可能没其他大牛透彻,有错误的跪求评论指正. 直接上图,对照图解和文字来分析触摸事件的传递. (1)乱七八糟图解版: (2)看图说话: (2.1)上图并不包含Activity,Activity没有onInterceptTouchEvent方法,默认实现都是直接往下传递. (2.2)讲解3个触摸事件控制方法的含义及其返回值的意义: <1>onInterceptTouchEvent onIn

iOS触摸事件总结

一.关于事件传递一些基础知识 1.UIView类是UIResponder的一个子类,因此能够接收用户和视图内容交互 时产生的触摸事件.触摸事件从发生触摸的视图开始,沿着响应者链进行传 递,直到最后被处理. 视图本身就是响应者,是响应者链的参与者,因此可以 收到所有关联子视图派发给它们的触摸事件. 2.在缺省情况下,视图每次只响应一个触摸动作.如果用户将第二个手 指放在屏幕上,系统会忽略该触摸事件,而不会将它报告给视图对象.如果您 希望在视图的事件处理器方法中跟踪多点触摸手势,则需要重新激活多点触

屏幕触摸事件监听,判断上下左右的操作行为,判断方法缩小的操作行为

在手机屏幕上能够实现的人机交互行为,大致包括点击按钮,拉动滑动块,物体缩放,上下左右拉动等. 手机屏幕触摸事件的监听方法: 1.首先要设置一块布局区域,frameLayout/LinearLayout等都可以,并为布局设置id: 2.在Activity中声明相应的布局类型,并通过findViewById()方法找到该布局,然后为该布局区域设置setOnTouchListener()方法,就能监听在相应屏幕触摸操作 实现屏幕触摸事件监听的代码: private LinearLayout Land;

VIew中的触摸事件 touchBegin 等一系列方法

5.触摸事件  touchBegin 等一系列方法 1)手指按下 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 2)按下并移动 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; 3)手指松开 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 4)非正

quick-x 触摸事件的新方法

--[[ local function onTouch(event, x, y) print(event, x, y) if event == "began" then return true -- 在 began 事件里返回 true,表示要接收后续的触摸事件 end end local layer = display.newLayer() layer:addTouchEventListener(onTouch) layer:setTouchEnabled(true) -- 注册后还

触摸事件中touchstar、touchmove、touchend、touchcancel事件应用方法及实例

一. 分享到: 前面我们介绍过移动设备中一些设备事件,例如手机旋转90度.倾斜等设置放置姿态变化的四大事件orientationchange事件.MozOrientation事件.deviceorientation事件.devicemotion事件,接下由南昌网站建设公司百恒网络前端开发工程师向大介绍在移动端的触摸事件.       iOS版 Safari为了向开发人员传达一些特殊信息,新增了一些专有事件.因为 iOS设备既没有鼠标 也没有键盘,所以在为移动 Safari开发交互性网页时,常规的