返回顶部
首页 > 资讯 > 精选 >Android中的 View框架可以对哪些事件进行操作
  • 352
分享到

Android中的 View框架可以对哪些事件进行操作

androidview 2023-05-31 09:05:53 352人浏览 八月长安
摘要

Android中的 View框架可以对哪些事件进行操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.Android View框架提供了3个对事件的主要操作概

Android中的 View框架可以对哪些事件进行操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一.Android View框架提供了3个对事件的主要操作概念。

1、事件的分发机制,dispatchTouchEvent。主要是parent根据触摸事件的产生位置,以及child是否愿意负责处理该系列事件等状态,向其child分发事件的机制。

2、事件的拦截机制,onInterceptTouchEvent。主要是parent根据它内部的状态、或者child的状态,来把事件拦截下来,阻止其进一步传递到child的机制。

3、事件的处理机制,onTouchEvent。主要是事件序列的接受者(可以是一个View或者ViewGroup),对事件作出处理,并且向其parent传递处理结果的机制。

二.在Java中,传递计算结果,有很多种途径,这里采用的是一种适用于同步调用的方法,返回值的方法。每个机制都使用boolean类型作为其返回值,那么每个机制的每个返回值是什么含义呢。

1、事件的分发机制,dispatchTouchEvent。

 true-事件被以该节点为根节点的View树成功处理,此时该事件就算是处理完成了,事件不会再向上返还给View的父节点(把事件分发过来的那个节点)。

false-以该节点为根节点的View树种,没有一个View(包括该View)成功处理了此事件,所以事件会向上返还给View的父节点(把事件分发过来的那个节点)。

2、事件的拦截机制,onInterceptTouchEvent。主要是parent根据它内部的状态、或者child的状态,来把事件拦截下来,阻止其进一步传递到child的机制。

true-当前ViewGroup(因为View中没有该方法,而没有child的VIew也不需要有拦截机制)希望该事件不再传递给其child,而是希望自己处理。

false-当前ViewGroup不准备拦截该事件,事件正常向下分发给其child。

3、事件的处理机制,onTouchEvent。主要是事件序列的接受者(可以是一个View或者ViewGroup),对事件作出处理,并且向其parent传递处理结果的机制。

true-表示该View成功处理了该事件,该处理结果会向上通知给其parent。

false-表示该View没有成功处理该事件,那么它的parent会有机会来处理该事件(parent标记为事件序列接受者,parent 的 onTouchEvent 在 Down 事件时返回true)。

三.源代码分析

View:

1、dispatchTouchEvent:

public boolean dispatchTouchEvent(MotionEvent event);

public boolean dispatchTouchEvent(MotionEvent event){   boolean result = false;   //如果有事件监听器,先让监听器处理事件。   if (mOnTouchListener.onTouch(event)) {     //如果监听器成功处理了该事件,处理结果设置为true。     result = true;   }   //如果没有监听器,就调用自身的onTouchEvent方法来处理事件。   if (!resutlt && onTouchEvent(event)) {     //如果自身的onTouchEvent成功处理事件,处理结果设置为true。     result = true;   }   return result; }

ViewGroup:

1、onInterceptTouchEvent

public boolean onInterceptTouchEvent(MotionEvent ev);

2、dispatchTouchEvent

public boolean dispatchTouchEvent(MotionEvent ev);

public boolean dispatchTouchEvent(MotionEvent ev) {  if (ACTION_DOWN事件 || 没有事件处理对象) {   if (允许拦截事件,该标志位由child调用requestDisallowInterceptTouchEvent<span >设置</span>) {    //查询拦截机制的结果,根据该结果来判断是否需要拦截    intercepted = onInterceptTouchEvent(ev);   } else {    //不允许拦截,那么不拦截    intercepted = false;   }  } else {   //不是DOWN,并且有处理对象,允许拦截,中断事件传递   intercepted = true;  }  if (不取消 && 不拦截) {   if (ACTION_DOWN) { //找寻接收事件序列的对象,其他事件不需要再计算事件产生对象,试想一下滑动一个ListView,当手指滑动出ListView的范围时,依然还是ListView响应后续事件。    for (遍历所有childView) {     if (触摸点不在childView内部) {      continue;     }     if (childView.dispatchTouchEvent(event)) {      保存处理该事件的View,后续事件直接传递到该View,不要重新计算;     }    }   }   if (还没有事件处理对象) {    //当前View树中没找到合适的child处理对象,把事件给自己处理,View.dispatchTouchEvent()就是把事件分发给自己    super.dispatchTouchEvent(event);   } else {    //传递给child    childView.dispatchTouchEvent(event);   }  } else if (拦截) {   //拦截事件,把事件给自己处理,View.dispatchTouchEvent()就是把事件分发给自己   super.dispatchTouchEvent(event);  }  return 处理结果; }

3、requestDisallowInterceptTouchEvent

public void requestDisallowInterceptTouchEvent(boolean disallowIntercept);

public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {  if (已经是当前要设置的状态) {   // 已经处于这个状态, 假设我们的parent也是这个状态   return;  }  设置该状态;  // 传递给parent  if (有父容器) {   设置父容器的拦截状态;  } }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Android中的 View框架可以对哪些事件进行操作

本文链接: https://lsjlt.com/news/224650.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android中的 View框架可以对哪些事件进行操作
    Android中的 View框架可以对哪些事件进行操作?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.Android View框架提供了3个对事件的主要操作概...
    99+
    2023-05-31
    android view
  • Caffe框架可以在哪些操作系统上运行
    Caffe框架可以在以下操作系统上运行: Linux Windows macOS Caffe框架的官方支持包括Ubuntu和Wi...
    99+
    2024-03-11
    Caffe
  • Oracle 视图可以进行DML操作的条件有哪些
    本篇文章给大家分享的是有关Oracle 视图可以进行DML操作的条件有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。条件一:在连接视图中不能有Order by、Group ...
    99+
    2023-06-06
  • navicat中对数据库进行操作的方法有哪些
    这篇文章主要介绍navicat中对数据库进行操作的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一,navicat如何写sql语句查询?方法1:ctrl+q就会弹出一个sq...
    99+
    2024-04-02
  • Node.js进行文件操作的方法有哪些
    这篇文章主要介绍“Node.js进行文件操作的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node.js进行文件操作的方法有哪些”文章能帮助大家解决问题。Node.js是一个基于Chro...
    99+
    2023-07-05
  • Java中对文件的操作有哪些
    这篇文章主要介绍“Java中对文件的操作有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中对文件的操作有哪些”文章能帮助大家解决问题。  java中提供了io类库,可以轻松的用...
    99+
    2023-06-03
  • PHP 中有哪些常用的文件操作函数可以用于并发操作?
    在 PHP 开发过程中,常常需要对文件进行操作,如读取、写入、复制、移动等。但是,在面对高并发的场景时,文件操作可能会成为瓶颈,影响系统的性能。因此,我们需要了解一些常用的文件操作函数,以便在进行并发操作时,提高系统的效率。 fopen...
    99+
    2023-09-15
    并发 文件 shell
  • 在Android应用中使用AlertDialog对话框可以实现哪些功能
    今天就跟大家聊聊有关在Android应用中使用AlertDialog对话框可以实现哪些功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。常用的Dialog有确认对话框,单选按钮对话框...
    99+
    2023-05-31
    android alertdialog roi
  • Pandas对数值进行分箱操作的方法有哪些
    这篇文章主要讲解了“Pandas对数值进行分箱操作的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pandas对数值进行分箱操作的方法有哪些”吧!前言使用 Pandas 的betw...
    99+
    2023-06-30
  • Android中的控件状态需要依赖哪些框架
    今天就跟大家聊聊有关Android中的控件状态需要依赖哪些框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入...
    99+
    2023-05-31
    android roi
  • Python中有哪些同步关键字可以用来控制框架的执行流程?
    Python是一门功能强大的编程语言,它提供了丰富的同步关键字来控制程序的执行流程。在这篇文章中,我们将介绍Python中常用的同步关键字,并且演示一些代码示例来更好地理解它们的用法。 什么是同步关键字? 在Python中,同步关键字是一些...
    99+
    2023-06-24
    同步 关键字 框架
  • IDE 中的哪些功能可以提高 ASP 框架的并发性能?
    ASP.NET 是一个非常流行的 Web 应用程序框架,但是在高并发的情况下,性能问题经常会成为一个瓶颈。在这篇文章中,我们将探讨如何利用 IDE 中的一些功能来提高 ASP 框架的并发性能。我们将涵盖以下内容: 选择正确的并发策略 使用...
    99+
    2023-08-28
    框架 并发 ide
  • android中对截图事件进行监听的原理是什么
    这篇文章给大家介绍android中对截图事件进行监听的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。监听截屏图片所在目录变化(FileObserver)监听媒体库的变化(ContentObserver)&nb...
    99+
    2023-05-30
    android 中对 roi
  • linux中怎么对有空格的文件夹进行操作
    今天就跟大家聊聊有关linux中怎么对有空格的文件夹进行操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  (1)创建文件夹  mkdir my first  这条命令创建了文件夹...
    99+
    2023-06-13
  • 浅谈Python中用datetime包进行对时间的一些操作
    1. 计算给出两个时间之间的时间差 import datetime as dt # current time cur_time = dt.datetime.today() # one day pre_t...
    99+
    2022-06-04
    浅谈 中用 操作
  • Java框架中数据类型同步操作的误区有哪些?
    Java作为一种面向对象的编程语言,其数据类型同步操作一直是程序员们需要注意的重点。在Java框架中,数据类型同步操作有很多误区,这些误区会对程序的性能和可靠性产生不利影响。本文将介绍Java框架中数据类型同步操作的误区,并提供相应的代码演...
    99+
    2023-08-04
    数据类型 框架 同步
  • 你知道PHP中有哪些UNIX文件函数可以帮你完成文件操作吗?
    PHP是一种非常流行的服务器端脚本语言,被广泛应用于Web开发领域。在PHP中,文件操作是一个非常常见的需求,而UNIX文件函数则是PHP中常用的文件操作函数之一。本文将介绍PHP中常见的UNIX文件函数,帮助你更好地完成文件操作。 一、打...
    99+
    2023-10-18
    unix 文件 函数
  • Go语言中的哪些容器框架可以帮助您实现异步编程?
    随着计算机技术的不断发展,异步编程变得越来越重要。在并发编程中,异步编程可以大大提高程序的性能和响应能力。而在Go语言中,有很多容器框架可以帮助您实现异步编程。本文将介绍Go语言中的几个常用容器框架,并演示如何使用这些框架来实现异步编程。...
    99+
    2023-10-30
    容器 框架 异步编程
  • Java编程中有哪些高效的算法可以实现同步操作?
    在Java编程中,同步操作是非常重要的一部分。同步操作可以保证多个线程之间的数据访问的顺序和正确性。在Java中,同步操作可以通过使用synchronized关键字来实现。除了synchronized关键字,Java中还有一些高效的算法可...
    99+
    2023-08-17
    编程算法 同步 numpy
  • ASP 框架开发技术:使用哪些工具可以更好地管理您的文件?
    ASP框架开发技术:使用哪些工具可以更好地管理您的文件? 在ASP框架开发过程中,文件管理是一个非常重要的话题。文件管理可以让您更好地组织代码,提高代码的可读性和可维护性。在本文中,我们将介绍一些可以帮助您更好地管理ASP框架开发过程中的文...
    99+
    2023-09-17
    框架 开发技术 文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作