服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

2021-01-10 14:20Android开发网 Android

本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTouchEvent的区别详解。需要的朋友参考下

首先从字面意思理解两个词

ontouchevent:触发触摸事件

onintercepttouchevent:触发拦截触摸事件

通过查看源代码及类继承关系

onintercepttouchevent:是定义于viewgroup里面的一个方法,此事件是用于拦截触摸事件的,viewgroup(继承自view),一个view的group,也就是我们的一个布局如linerlayout,各个布局类都继承自viewgroup;

ontouchevent:是定义于view中的一个方法,处理传递到view的手势触摸事件。手势事件类型包括action_down,action_move,action_up,action_cancel等事件;

其中viewgroup里的onintercepttouchevent默认返回值是false,这样touch事件会传递到view控件,viewgroup里的ontouchevent默认返回值是false;

view里的ontouchevent默认返回值是true,当我们手指点击屏幕时候,先调用action_down事件,当ontouchevent里返回值是true的时候,ontouch会继续调用action_up事件,如果ontouchevent里返回值是false,那么ontouchevent只会调用action_down而不调用action_up。

1、新建两个类llayout , lview 如下

复制代码 代码如下:

public class llayout extends framelayout {
 // viewgroup
 @override
 public boolean onintercepttouchevent(motionevent ev) {
  log.i("ltag", "llayout onintercepttouchevent");
  log.i("ltag", "llayout onintercepttouchevent default return" + super.onintercepttouchevent(ev));
  return super.onintercepttouchevent(ev);
 }
 // view
 @override
 public boolean ontouchevent(motionevent event) {
  log.i("ltag", "llayout ontouchevent");
  log.i("ltag", "llayout ontouchevent default return" + super.ontouchevent(event));
  return super.ontouchevent(event);
 }
}
public class lview extends button {
 // textview <-- view
 @override
 public boolean ontouchevent(motionevent event) {
  log.i("ltag", "ontouchevent");
  log.i("ltag", "ontouchevent default return" + super.ontouchevent(event));
  return super.ontouchevent(event);
 }
}


 2、修改布局文件为如下布局
 

复制代码 代码如下:

 <com.touchpro.llayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
  <com.touchpro.lview
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/app_name" />
</com.touchpro.llayout>


(1)先点击界面中的按钮
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
(2)再点击界面中的其它区域
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
结论:llayout 中 onintercepttouchevent 默认返回值为false,ontouchevent 默认返回值为false,所以只调用了action_down事件;

 

lview中 ontouchevent 默认返回值为true;调用了action_down,action_up 两个事件;

(3)修改llayout中onintercepttouchevent返回值为true,再次运行代码:
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
结论:llayout中onintercepttouchevent返回了true,对触摸事件进行了拦截,所以没有将事件传递给view,而直接执行了llayout中的ontouchevent事件;

(4)把llayout中onintercepttouchevent返回值改为false,再把lview中的ontouchevent改为返回false:
浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解
结论:由于将lview中ontouchevent返回值修改为false,因此只执行了action_down,然后就到llayout中执行ontouchevent事件了;

viewgroup里的onintercepttouchevent默认值是false这样才能把事件传给view里的ontouchevent.

viewgroup里的ontouchevent默认值是false。

view里的ontouchevent返回默认值是true.这样才能执行多次touch事件。

延伸 · 阅读

精彩推荐
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11