文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android应用中onTouchEvent处理机制是什么

2023-05-31 06:31

关注

本篇文章为大家展示了android应用中onTouchEvent处理机制是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、 概述

只有view,ViewGroup,Activity 具有事件分发和消费的功能。

Activity因为上最先接触到触摸事件,因此Activity没有事件拦截方法。即没有dispatchTouchEvent方法。

对于不能添加子控件的view,不能对事件进行分发和拦截,它只有onTouchEvent事件。

二、三个方法

public boolean dispatchTouchEvent(MotionEvent ev)

当触摸事件发生的时候,首先会被当前的activity进行分发,即当前activity的dispatchTouchEvent方法会被执行。

这个时候,该方法有三种返回的情况:

return false: 表明事件不会被进行分发。事件会以冒泡的方式被传递给上层的view或activity的onTouchEvent方法进行消费掉。

return true:表明该时间已经被处理。事件会被当前view或activity的dispatchTouchEvent给消费掉。不会再进行传递,事件到此结束。

return super.dispatchTouchEvent(ev):表明该事件将会被分发。此时当前View的onIntercepterTouchEvent方法会捕获该事件,判断需不需要进行事件的拦截。

public boolean onInterceptTouchEvent(MotionEvent ev)    

该方法用户拦截被传递过来的事件,用于判断被传递过来的事件是否需要被当前的view进行处理。

return false :不对事件进行拦截,放行该事件。事件会被传递到当前view的子控件中,由子控件中的dispatchTouchEvent方法进行分发处理。

return true : 拦截该事件,将该事件交给当前view的onTouchEvent方法进行处理。

return super.inInterceptTouchEvent(ev):默认拦截方式,和return true一样。该事件会被拦截,将该事件交给当前view的onTouchEvent方法进行处理。(这里需要有一点说明,当有两个view。A view中有一个B view.点击A.A中如果onInterceptTouchEvent()返回super.interceptTouchEvent(ev),则事件将会被A进行拦截,交给A的onTouchEvent()进行处理,如果点击的是B,A中如果onInterceptTouchEvent()返回super.interceptTouchEvent(ev),则事件将不会被拦截,会被分发到子控件中) 

public boolean onTouchEvent(MotionEvent event)

当前的view把事件进行了拦截,则事件则会被传递到该方法中

return false:表明没有消费该事件,事件将会以冒泡的方式一直被传递到上层的view或Activity中的onTouchEvent事件处理。如果最上层的view或Activity中的onTouchEvent还是返回false。则该事件将消失。接下来来的一系列事件都将会直接被上层的onTouchEvent方法捕获

return true: 表明消费了该事件,事件到此结束。

return super.onTouchEvent(event):默认情况,和return false一样。

验证:

MainActivity FatherView ChildView中几个方法都返回super.****TouchEvent(ev)

分析:

当点击屏幕。MainActivity 中的dispatchTouchEvent方法先执行,打印MainActivity-dispatchTouchEvent-->ACTION_DOWN

因为返回的是super.dispatchTouchEvent(ev),所以事件ev将会被分发,但是MainActivity中没有onInterceptTouchEvent()方法,所以事件被传递到FatherView中的dispatchTouchEvent方法.打印FatherView-dispatchTouchEvent-->ACTION_DOWN

在FatherView中dispatchTouchEvent返回的是super.dispatchTouchEvent(ev),所有事件会被分发。FatherView中的onInterceptTouchEven()中的方法被执行。打印FatherView-onInterceptTouchEven-->ACTION_DOWN

FatherView中的onInterceptTouchEven()返回的是super.onInterceptTouchEvent(ev)。在这里,(1)如果点击的是屏幕中的ChildView。事件将不会被拦截,会被传递到ChildView中的dispatchTouchEvent方法中。(2)如果点击的值FatherView则事件将会被拦截。FatherView中的onTouchEvent()方法将被执行。以(1)为例,将打印ChildView-dispatchTouchEvent-->ACTION_DOWN。

ChildView中dispatchTouchEvent返回的是super.dispatchTouchEvent(ev),所有事件会被分发。打印ChildView-onInterceptTouchEvent-->ACTION_DOWN。

此时ChildView中onInterceptTouchEvent返回的是super.onInterceptTouchEvent(ev),,而且已经没有子控件了,所以事件将被拦截。打印ChildView-onTouchEvent-->ACTION_DOWN。

在childView中onTouchEvent()返回额是super.onTouchEvent(ev)。事件将不会被消耗,将以冒泡的方式传递到上层空间中的onTouchEvent(),此处上层空间中的onTouchEvent返回的都是super.onTouchEvent(ev)。所以讲一次打印 Father-onTouchEvent-->ACTION_DOWN。 MainActivty-onTouchEvent-->ACTION_DOWN。

之后的事件动作,将不再被MainActivity分发到子view,直接被MainActivty中的onTouchEvent处理消耗。打印MainActivity-dispatchTouchEvent-->ACTION_UP,MainActivty-onTouchEvent-->ACTION_UP

MainActivity-dispatchTouchEvent-->ACTION_DOWNFatherView-dispatchTouchEvent-->ACTION_DOWNFatherView-onInterceptTouchEven-->ACTION_DOWNChildView-dispatchTouchEvent-->ACTION_DOWNChildView-onInterceptTouchEvent-->ACTION_DOWN。ChildView-onTouchEvent-->ACTION_DOWNFather-onTouchEvent-->ACTION_DOWN。 MainActivty-onTouchEvent-->ACTION_DOWNMainActivity-dispatchTouchEvent-->ACTION_UP,MainActivty-onTouchEvent-->ACTION_UP

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯