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

简介: 前三天收到位网友的私信求助,问题大概如标题所示。具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见。不想看前奏的请直接跳至解决方法。   问题原型:      父控件是自定义的 LinearLayout,目的是实现下拉刷新,这个自定义View的实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多的监听。

 

前三天收到位网友的私信求助,问题大概如标题所示。具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见。不想看前奏的请直接跳至解决方法

 

问题原型:

     父控件是自定义的 LinearLayout,目的是实现下拉刷新,这个自定义View的实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多的监听。看到这,我相信任何一个有类似项目开发经验的人,都会感到很熟悉的。下拉刷新+下滑加载更多。

      在 scrollView 里面的第一层View里面有很多一样的自定义的 View,每个有具备自身的 onClick 和 onTouch 事件,目的是为了在用户点击的时候实现变色和相应。

      问题来了,根据他说的,每次点击,总是先实现 自定义View的 onTouch 的down,然后是 onClick,而 父 Linearlayout的 onTouch是最后实现,而且,父的 action_down 没有执行,这样就直接导致了父View 拿不到用户的 点击坐标,下拉刷新出问题!就是说,各种冲突。

      我们知道,在同一个 View中,注意,是同一个 View,没嵌套的情况下,用户手势事件执行顺序是:

      onTouch->onLongClick->onClick。

 

交谈细节:

      我问:你自己百度过了吗?

        他答:嗯,百度上有onClick和onTouch的冲突例子,但是全都是针对同一个 View的情况下,而且 无论onTouch返回false不阻断还是true阻断继续传送下去,都是无作用。

        他的回答很清晰,他的这个状况的冲突是 嵌套的,大家大可百度下,因为我在帮他的时间里,也百度过,基本无答案。最能接近的是父View的onTouch里面使用 requestDisallowInterceptTouchEvent 来允许这个手势事件能传给 子View,但是,他的这个问题是,儿子不爽父亲先的。确实蛋碎。

        我再问:是不是你的布局有问题,怎么会是子 View 阻断 父 View?

        他再答:他的布局就是正常的嵌套。

        在无语了一会之后,想了下,觉得这样应该可以搞定。

 

解决方法:

    既然传统的解决方法解决不了,我当时想到的是:

     1:子View 使用父类的 onTouch 接口来实现点击和改变颜色,总之就是子View不要自己再实现 onClick和onTouch;

     2:父View 实现个接口,供子View实现自己的onTouch内容;

     3:当用户onTouch的时候,父View 在恰当的时候调用该接口,实现子View的请求的功能。

     这样所会产生的问题:

     因为它的这个父View是整个使用onTouch来实现下拉的,所以:

     1:用户点击后会产生两次的 onTouch执行,一次是子 View,第二次是 父View。

     这样就需要他来使用逻辑区分了,逻辑区分不难,几个 boolean 即可,所用内存几个 bit。

      

      最后问他,这样能否接受,他说试试先,刚刚发信息来,完美解决。逐有感而发此文。

 

      在我们百度或请教人都解决不了的问题的情况下,应该自己思考下动手解决!

 

如果您认为这篇文章还不错或者有所收获,您可以通过扫描一下下面的支付宝二维码 打赏我一杯咖啡【物质支持】,也可以点击右下角的【推荐】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力


img_12e3f54d4d0f70f0eb14f20548e3d781.png
目录
相关文章
|
6月前
|
XML Java Android开发
Android Studio App开发中改造已有的控件实战(包括自定义支付宝月份选择器、给翻页栏添加新属性、不滚动的列表视图 附源码)
Android Studio App开发中改造已有的控件实战(包括自定义支付宝月份选择器、给翻页栏添加新属性、不滚动的列表视图 附源码)
114 1
|
27天前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
21 0
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
42 3
|
3月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
5月前
|
Java Android开发
18. 【Android教程】图片控件 ImageView
18. 【Android教程】图片控件 ImageView
77 4
|
4月前
|
XML 数据格式
Android-自定义三角形评分控件
Android-自定义三角形评分控件
38 0
|
5月前
|
前端开发 API Android开发
25. 【Android教程】列表控件 ListView
25. 【Android教程】列表控件 ListView
146 2
|
5月前
|
Java Android开发 开发者
17. 【Android教程】开关控件ToggleButton/Switch
17. 【Android教程】开关控件ToggleButton/Switch
59 2
|
5月前
|
XML Android开发 数据格式
Android基础控件介绍
Android基础控件介绍
|
5月前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
62 0