首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    问题来了,根据他说的,每次点击,总是先实现 自定义View的 onTouch 的down,然后是 onClick,而 父 Linearlayout的 onTouch是最后实现,而且,父的 action_down...他答:嗯,百度上有onClick和onTouch的冲突例子,但是全都是针对同一个 View的情况下,而且 无论onTouch返回false不阻断还是true阻断继续传送下去,都是无作用。        ...解决方法: 既然传统的解决方法解决不了,我当时想到的是:      1:子View 使用父类的 onTouch 接口来实现点击和改变颜色,总之就是子View不要自己再实现 onClick和onTouch...;      2:父View 实现个接口,供子View实现自己的onTouch内容;      3:当用户onTouch的时候,父View 在恰当的时候调用该接口,实现子View的请求的功能。...这样所会产生的问题:      因为它的这个父View是整个使用onTouch来实现下拉的,所以:      1:用户点击后会产生两次的 onTouch执行,一次是子 View,第二次是 父View。

    1.5K50

    Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    因此事件传递的顺序是先经过onTouch,再传递到onClick。...细心的朋友应该可以注意到,onTouch方法是有返回值的,这里我们返回的是false,如果我们尝试把onTouch方法里的返回值改成true,再运行一次,结果如下: 我们发现,onClick方法不再执行了...你可以先理解成onTouch方法返回true就认为这个事件被onTouch消费掉了,因而不会再继续向下传递。...第三个条件就比较关键了,mOnTouchListener.onTouch(this, event),其实也就是去回调控件注册touch事件时的onTouch方法。...现在我们可以结合前面的例子来分析一下了,首先在dispatchTouchEvent中最先执行的就是onTouch方法,因此onTouch肯定是要优先于onClick执行的,也是印证了刚刚的打印结果。

    81410

    Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    可以看到,onTouch是优先于onClick执行的,并且onTouch执行了两次,一次是ACTION_DOWN,一次是ACTION_UP(你还可能会有多次ACTION_MOVE的执行,如果你手抖了一下...因此事件传递的顺序是先经过onTouch,再传递到onClick。...细心的朋友应该可以注意到,onTouch方法是有返回值的,这里我们返回的是false,如果我们尝试把onTouch方法里的返回值改成true,再运行一次,结果如下: ?...你可以先理解成onTouch方法返回true就认为这个事件被onTouch消费掉了,因而不会再继续向下传递。...第三个条件就比较关键了,mOnTouchListener.onTouch(this, event),其实也就是去回调控件注册touch事件时的onTouch方法。

    1.6K60

    dispatchTouchEvent事件分发浅析(三)点击执行顺序

    https://github.com/2954722256/demo_event ---- 这里 我们给上一篇的2个例子, 只是在MainActivity中, 分别给2个控件, 添加上OnClick 和 OnTouch...dispatchTouchEvent ----> ACTION_DOWN ----> noMsg MainActivity ---- btn setOnTouchListener onTouch..., 再 获取到OnTouchEvent事件(系统的,消费) , 再触发 OnClick 事件 我们可以理解成, 点击事件从最外层分发下来, 先触发 TouchListener回调接口, 系统获得处理OnTouch...dispatchTouchEvent ----> ACTION_DOWN ----> noMsg MainActivity ---- LL setOnTouchListener onTouch...(系统的,消费) , 再触发 OnClick 事件 只是, ViewGroup没有调用最外面Activity的OnTouchEvent方法了 ** 可以理解成,这里消费掉了点击, 就不用调用上层的 OnTouch

    1.4K20

    Carson带你学Android:手把手带你深入分析事件分发机制!

    即回调控件注册Touch事件时的onTouch(); * 2....()返回false 注册Touch事件监听 且 在onTouch()返回true 分析1:注册Touch事件监听 且 在onTouch()返回false 代码示例 // 1....(), 动作是:0 执行了onTouch(), 动作是:1 执行了onClick() 测试结果说明 点击按钮会产生两个类型的事件-按下View与抬起View,所以会回调两次onTouch(); 因为onTouch...(), 动作是:0 执行了onTouch(), 动作是:1 测试结果说明 点击按钮会产生两个类型的事件-按下View与抬起View,所以会回调两次onTouch(); 因为onTouch()返回了true...()中调用 但onTouch()优先于onTouchEvent执行;若手动复写在onTouch()中返回true(即 将事件消费掉),将不会再执行onTouchEvent() 注:若1个控件不可点击(

    1K10

    android view事件分发机制_android事件分发流程图

    我们看下onTouch和onClick,从参数都能看出来onTouch比onClick强大灵活,毕竟多了一个event参数。...如果你眼睛比较尖你会看见onTouch会有一个返回值,而且在上面返回了false。你可能会疑惑这个返回值有啥效果?那就验证一下吧,我们将上面的onTouch返回值改为ture。...,如果onTouch返回true则onClick不会被调运了。...控件触摸就会调运dispatchTouchEvent方法,而在dispatchTouchEvent中先执行的是onTouch方法,所以验证了实例结论总结中的onTouch优先于onClick执行道理。...如果控件是ENABLE且在onTouch方法里返回了true则dispatchTouchEvent方法也返回true,不会再继续往下执行;反之,onTouch返回false则会继续向下执行onTouchEvent

    89120

    Android高级进阶之路【二】十分钟彻底弄明白 View 事件分发机制

    即回调控件注册Touch事件时的onTouch(); * 2\....()返回false 注册Touch事件监听 且 在onTouch()返回true 分析1:注册Touch事件监听 且 在onTouch()返回false 代码示例 // 1\....(), 动作是:0 执行了onTouch(), 动作是:1 执行了onClick() 测试结果说明 点击按钮会产生两个类型的事件-按下View与抬起View,所以会回调两次onTouch(); 因为onTouch...(), 动作是:0 执行了onTouch(), 动作是:1 测试结果说明 点击按钮会产生两个类型的事件-按下View与抬起View,所以会回调两次onTouch(); 因为onTouch()返回了true...() 注:若1个控件不可点击(即非enable),那么给它注册onTouch事件将永远得不到执行,具体原因看如下代码 // &&为短路与,即如果前面条件为false,将不再往下执行 // 故:onTouch

    90230

    鸿蒙开发:单一手势实现长按事件

    首先第一种方式,我们肯定能够想到使用onTouch方法,在手指按下的时候记录一个时间值,在手指抬起的时候再记录一个时间值,后者减去前者,如果大于我们定义的长按时间,那么就是一次长按事件,基本代码如下:Button...("长按") .onTouch((event) => { if (event.type == TouchType.Down) { this.mDownTime...Button("长按") .onTouch((event) => { if (event.type == TouchType.Down) { this.mDownTime...event.type == TouchType.Up) { clearTimeout(this.mLongClickId) } })日志输出以上呢,是通过onTouch...相关总结虽然说我们可以通过onTouch来实现一个长按事件,但是如果想要实现连续,多指那么就比较麻烦,远远没有LongPressGesture实现起来简单,所以在实际的开发中,大家还是以LongPressGesture

    40810

    Android 事件分发机制

    1.4 onTouch 是触摸事件,当一个触摸事件被分发到一个view的时候。...1.6 onClick 是一个点击事件,是在onTouchEvent的up事件里面执行的,它的优先级是最低,如果在onTouchEvent或OnTouchListener的onTouch方法如果返回true...onTouch,onTouchEvent和onClick的执行顺序:onTouch—>onTouchEvent—>onClick,注意:onClick直接消费掉了事件,不会再向上回溯事件了。...,而且事件也不再传递到子View 4.那如果我们不想让TextView的点击事件响应怎么办,按照上面的andorid事件分发流程图,方法多了,我们可以在不同的阶段进行控制,不让事件向下分发,但我们试试onTouch...测试结果是可以的,也就是说onTouch()方法返回true也是自己消费了,不会在向下传递到onTouchEvent()了,更不会传递到onClick()了,如图: ? image.png ?

    2K21
    领券