ViewGroup.onInterceptTouchEvent(),onTouchEvent()事件学习

onInterceptTouchEvent()
onInterceptTouchEvent()是用于处理事件(类似于预处理)并改变事件的传递方向。
返回flase,事件则传递给子View。由子View继续处理。子View继续从onInterceptTouchEvent()开始轮回–>如果子View的OnTouchEvent返回true,则onInterceptTouchEvent()的move、up执行.

返回true,事件则传递传递给当前的控件的onTouchEvent()处理(自己的onTouchEvent()) --> 如果自己的onTouchEvent也返回True.–>则onInterceptTouchEvent()的down、move、up执行.

onTouchEvent()
onTouchEvent()用于处理事件,返回值决定当前控件是否消费(consume)了这个事件
返回true则touch事件就是在子控件处理(consume)了。这就是子控件拦截啦~

返回false则向上传递给父控件。

听懂了嘛?应该没有吧~那我们继续结合图例来看一下。
在这里插入图片描述

根据大佬的参考图,也说的很清楚。所以,直接引用~
https://www.cnblogs.com/lbangel/p/3791431.html

<com.test.LayoutView1 xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical" android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <com.test.LayoutView2  
        android:orientation="vertical" android:layout_width="fill_parent"  
        android:layout_height="fill_parent" android:gravity="center">  
        <com.test.MyTextView  
            android:layout_width="wrap_content"   android:layout_height="wrap_content"  
      />  
    </com.test.LayoutView2>  
</com.test.LayoutView1>

在这里插入图片描述
那么首先看一下默认的触屏事件的在两个函数之间的传递流程。如下图:

在这里插入图片描述
如果仅仅想让MyTextView来响应触屏事件,让MyTextView的OnTouchEvent返回true,那么事件流就变成如下图,可以看到layoutview1,layoutview2已经不能进入OnTouchEvent:

在这里插入图片描述
另外一种情况,就是外围容器想独自处理触屏事件,那么就应该在相应的onInterceptTouchEvent函数中返回true,表示要截获触屏事件,比如layoutview1作截获处理,处理流变成如下图:

在这里插入图片描述
那么应用场景呢?
那我们可以想到普通的Button实现,点击按住时高亮,松开后恢复原来的。
那点击按住的时候,那就是被拦截住了。
当然我这边要看关于拖拽的List,如何实现。就是捕获点击时down事件,或者其它事件了~好了,今天的快乐学习时光结束了,我们下次再见。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值