当前位置: 首页 > news >正文

淘客做网站多少钱奖状制作app

淘客做网站多少钱,奖状制作app,logo大师,wordpress头部高度文章目录 一、事件传递路径二、触摸事件的三个关键方法2.1 dispatchTouchEvent(MotionEvent ev)2.2 onInterceptTouchEvent(MotionEvent ev)2.3 onTouchEvent(MotionEvent event) 三、ViewGroup中的dispatchTouchEvent实现四、总结 在Android系统中,触摸事件的分发和…

文章目录

  • 一、事件传递路径
  • 二、触摸事件的三个关键方法
    • 2.1 dispatchTouchEvent(MotionEvent ev)
    • 2.2 onInterceptTouchEvent(MotionEvent ev)
    • 2.3 onTouchEvent(MotionEvent event)
  • 三、ViewGroup中的dispatchTouchEvent实现
  • 四、总结

在Android系统中,触摸事件的分发和处理是一个非常重要的部分。了解触摸事件的分发机制对于我们进行界面交互设计和优化具有重要意义。本文将详细介绍Android下的Touch事件分发机制,包括事件分发的过程、涉及的方法以及ViewGroup中事件分发的实现。

一、事件传递路径

触摸事件的传递路径是从Activity到Window,再到View。具体来说,当一个触摸事件产生时,首先会传递给Activity的dispatchTouchEvent方法,然后由Activity将事件传递给Window,最后由Window将事件传递给顶层的View。在View层级结构中,事件会从上到下(父View到子View)进行传递,直到有一个View能够处理这个事件为止。

二、触摸事件的三个关键方法

在Android系统中,触摸事件的分发过程涉及到三个重要的方法:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)和onTouchEvent(MotionEvent ev)。下面我们分别来看一下这三个方法在ViewGroup和Activity中的作用。

2.1 dispatchTouchEvent(MotionEvent ev)

此方法用来分发事件。如果当前事件能传递到该View,该方法一定会被调用。当Touch事件发生时,Activity的dispatchTouchEvent(MotionEvent ev)方法会以隧道方式将事件传递给最外层View的dispatchTouchEvent(MotionEvent ev)方法,并由该View的dispatchTouchEvent(MotionEvent ev)方法对事件进行分发。

2.2 onInterceptTouchEvent(MotionEvent ev)

此方法用来拦截事件。如果返回值为true,表示拦截,否则不拦截。在外层View的dispatchTouchEvent(MotionEvent ev)方法返回系统默认的super.dispatchTouchEvent(ev)情况下,事件会自动的分发给当前View的onInterceptTouchEvent方法。

2.3 onTouchEvent(MotionEvent event)

此方法用于处理当前事件。如果返回值为true表示消耗该事件,否则无法再接收同一个序列的事件。如果dispatchTouchEvent方法return false,事件会以冒泡方式返回给上层的onTouchEvent进行消费。

三、ViewGroup中的dispatchTouchEvent实现

在Android系统中,ViewGroup对dispatchTouchEvent方法进行了重载,以实现更复杂的事件分发逻辑。以下是一些关键的代码片段:

public boolean dispatchTouchEvent(MotionEvent ev) {boolean handled = false;// 调用onInterceptTouchEvent方法来判断是否需要拦截当前的触摸事件if (onInterceptTouchEvent(ev)) {// 如果需要拦截,就会将事件的动作设置为ACTION_CANCEL,并清除所有的触摸目标。ev.setAction(MotionEvent.ACTION_CANCEL);if (mFirstTouchTarget != null) {removePointersFromTouchTargets(0);}handled = true;} else {// 如果没有触摸目标,就会调用onTouchEvent方法来处理事件if (mFirstTouchTarget == null) {handled = onTouchEvent(ev);} else {// 如果有触摸目标,就会遍历所有的触摸目标,调用dispatchTransformedTouchEvent方法来分发事件。TouchTarget target = mFirstTouchTarget;while (target != null) {TouchTarget next = target.next;if (dispatchTransformedTouchEvent(ev, false, target.child, target.pointerIdBits)) {handled = true;}target = next;}}}return handled;
}

首先,onInterceptTouchEvent方法被调用,用于判断当前ViewGroup是否要拦截这个触摸事件。如果onInterceptTouchEvent返回true,那么这个触摸事件将会被拦截,不再向下传递,同时触摸事件的action将会被设置为ACTION_CANCEL,表示这个触摸事件被取消。

然后,如果没有拦截触摸事件,那么会检查是否有触摸目标(mFirstTouchTarget)。如果没有触摸目标,那么会直接调用onTouchEvent方法来处理这个触摸事件。如果有触摸目标,那么会遍历所有的触摸目标,并调用dispatchTransformedTouchEvent方法来分发触摸事件。这个过程会一直进行,直到找到能够处理这个触摸事件的View为止。

总的来说,ViewGroup的dispatchTouchEvent方法通过调用onInterceptTouchEvent和onTouchEvent方法,实现了触摸事件的拦截和处理。这个过程涉及到了事件的分发、拦截和消费,是理解Android触摸事件分发机制的关键。

四、总结

通过本文的介绍,我们了解了Android下的Touch事件分发机制,包括事件分发的过程、涉及的方法以及ViewGroup中事件分发的实现。掌握这些知识点,可以帮助我们更好地进行事件处理和控件开发,提高应用的用户体验。

http://www.yayakq.cn/news/744195/

相关文章:

  • windows iis运行php网站各大企业邮箱
  • ui设计网站设计与网页制作视频教程深圳工业设计招聘
  • 网站开发工具是啥wordpress搜索结果页样式
  • 如何建立一个网站平台网站网站开发怎么兼容浏览器
  • 想兼职做网站推广其中最重要的网络设计结果
  • 湘潭网站公司中文儿童网站模板
  • 衡水电子网站建设做网站如何抓住客户的需求
  • 帝国cms更改网站ico软件开发好吗
  • 技术馆网站建设深圳建网站培训机构
  • 企业网站网页打开慢深圳龙岗发布通告
  • 网站logo 更换建立互联网公司网站
  • 九一制作厂网站农八师建设兵团社保网站
  • 爱情表白制作网页的网站跨境电商有什么平台
  • 一次性筷子网站建设织梦网站怎么更换模板
  • 营销型网站单页面摄影网站开发综述
  • 天然气公司的网站应该怎么做临沂网站建设方案服务
  • 山东城市建设学院网站一级域名网站怎样收费的
  • 青岛网站建设推广专家网上有哪些网站做兼职
  • 网站地图怎么做_环保网站 下载
  • 网站开发工程师php岗位职责二手交易网站建设的功能定位
  • 龙岩 网站建设珠海微网站制作
  • 网站开发和设计手机网页前端开发
  • 云南网站建设专业品牌网站建设计划书实验总结
  • 做网站要签合同吗在网站里继费
  • 邢台企业做网站找谁个人网站免费域名获取
  • 淮阴区建设局网站网络广告策划案例
  • 如何用图片做网站背景模板展示网站源码
  • 网站建设中 目录是什么沈阳制作网站
  • 福安做网站最好公众号开发者id在哪
  • 做网站有哪些公司好网推技巧