Android 事件处理

android下,事件的发生是在监听器下进行,android系统可以响应按键事件和触摸屏事件,事件说明如下:

 onClick(View v) 一个普通的点击按钮事件 

 boolean onKeyMultiple(int keyCode,int repeatCount,KeyEvent event)用于在多个事件连续时发生,用于按键重复,必须重载@Override实现

 boolean onKeyDown(int keyCode,KeyEvent event) 用于在按键进行按下时发生 

 boolean onKeyUp(int keyCode,KeyEvent event) 用于在按键进行释放时发生

 onTouchEvent(MotionEvent event)触摸屏事件,当在触摸屏上有动作时发生

 boolean onKeyLongPress(int keyCode, KeyEvent event)当你长时间按时发生

当屏幕中包含一个ViewGroup,而这个ViewGroup又包含一个子view,这个时候android系统如何处理Touch事件呢?到底是ViewGroup来处理Touch事件,还是子view来处理Touch事件呢?

android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:

1public boolean dispatchTouchEvent(MotionEvent ev)  这个方法用来分发TouchEvent

2public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent

3public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent

  

有一些不属于View,但是也能直接影响到事件处理的方法:

       Activity.dispatchTouchEvent(MotionEvent) -可以在这些事件被分派到窗口之前让Activity截获所有的事件。

       ViewGroup.onInterceptTouchEvent(MotionEvent) -ViewGroup在事件分派到子View之前看到这些事件。

       ViewParent.requestDisallowInterceptTouchEvent(boolean) – 让父View不要使用      onInterceptTouchEvent(MotionEvent)来截获event. 

一个ViewGroup是一个可以包含其他view的特别的View(是View的子类),ViewGroup是各个LayoutView组件的基类,这个类还定义了LayoutParams类来指定这个基类的布局参数。

1)事件的初始触发者是父组件(LinearLayout),父组件有权决定是分发这个事件还是拦截这个事件;

2)如果父组件分发这个事件,则子控件会收到这个事件,子控件调用onTouchEvent方法处理事件,如果onTouchEvent返回的是false,则事件还会交给父组件处理。

总结论是:

Android的触摸事件分发是从最上层的Activity开始的,然后dispatch到子View,当分发到触发事件的View时,再逐层往回调用onTouchEvent函数,下面是实例代码。

TouchEvent发生时,首先ActivityTouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由  dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个viewonTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会消失,而且接收不到下一次事件。

综上结论:

1种情况 L.onInterceptTouchEvent=false&& L.onTouchEvent=true &&T.onTouchEvent=true  结论:TouchEvent完全由TextView处理。

2种情况  L.onInterceptTouchEvent=false&& L.onTouchEvent=true &&T.onTouchEvent=false 结论:TextView只处理了ACTION_DOWN事件,LinearLayout处理了所有的TouchEvent

3种情况  L.onInterceptTouchEvent=true&& L.onTouchEvent=true  结论:LinearLayout处理了所有的TouchEvent

4种情况  L.onInterceptTouchEvent=true&& L.onTouchEvent=false  结论:LinearLayout只处理了ACTION_DOWN事件,那么其他的TouchEvent被谁处理了呢?答案是LinearLayout最外层的Activity处理了TouchEvent

 Touch Mode 触摸模式

        但一个用户使用方向键或者轨迹球来在UI上移动时, 需要让可动作的UI元素获得焦点, 这样用户可以看到什么东西将获得他们的输入。如果设备具有触摸能力,用户使用触摸的方式来交互,那么就没有必要给一个元素焦点。因此,有一种交互的模式叫做触摸模式

       对于一个可触摸的设备,一旦用户触摸了屏幕,设备就进入触摸模式。在这以后,只有isFocusableInTouchMode()为 真的View是可以获得焦点的, 例如文本框。其它的View可以触摸,例如按钮,在触摸的时候不会获得焦点。它们只是启动对应的on-click监听器。在用户按下方向键或者旋转轨迹球 时,设备将退出触摸模式,并寻找一个view并使他获得焦点。现在,用户可以不触摸屏幕来交互。

      触摸模式状态在整个系统中被维护。你可以使用isInTouchMode()来查询当前状态。

Handling Focus 处理焦点

         android框架会根据用户输入来处理焦点的移动。这包含了在View被移除或隐藏或再次出现时改变焦点。View使用isFocusable()setFocusable()方法来表示和设置它们能否获得焦点。在触摸模式下,可以使用isFocusableInTouchMode()setFocusableInTouchMode().

        焦点移动时基于在某方向上最近距离元素的算法。在很少见的情形下,默认的算法可能和开发者的想法不一样。在这种情况下,你可以提供一个算法,修改以 下几个xml属性:nextFocusDown, nextFocusLeft, nextFocusRight和 nextFocusUp.

一般来说,在这个竖直向下的布局中,从第一个按钮向上不会走到哪里。加入上述代码后,从第一个按钮向上会使第二个按钮获取焦点。

       如果你希望将一个View设为可获取焦点,那么加入xml属性android:focusable=true” 和 android:focusableInTouchMode = true.

       希望一个View获得焦点时,调用requestFocus().

       要监听焦点事件,使用onFocusChange()

标题基于SpringBoot的蛋糕烘焙分享平台研究AI更换标题第1章引言介绍蛋糕烘焙分享平台的研究背景、意义、现状以及论文的方法和创新点。1.1研究背景与意义分析蛋糕烘焙行业的现状,阐述分享平台的重要性和意义。1.2国内外研究现状综述国内外在蛋糕烘焙分享平台方面的研究进展。1.3论文方法及创新点概述论文的研究方法,突出创新点。第2章相关理论介绍SpringBoot框架和分享平台开发的相关理论。2.1SpringBoot框架概述简述SpringBoot框架的特点、优势和应用场景。2.2分享平台技术基础阐述分享平台开发所需的技术基础,如前后端分离、数据库设计等。2.3用户行为分析理论介绍用户行为分析的基本理论和方法,为平台功能设计提供指导。第3章平台需求分析对蛋糕烘焙分享平台进行需求分析,明确平台功能和性能要求。3.1目标用户群体分析分析平台的目标用户群体,了解其需求和特点。3.2功能需求分析详细分析平台应具备的功能,如用户注册、烘焙教程发布、互动交流等。3.3性能需求分析对平台的性能要求进行分析,确保平台的稳定性和可扩展性。第4章平台设计根据需求分析结果,设计蛋糕烘焙分享平台的整体架构和详细功能。4.1平台架构设计设计平台的整体架构,包括前后端分离、数据库设计等。4.2功能模块设计详细设计平台的功能模块,如用户管理、内容管理、互动交流模块等。4.3数据库设计根据平台需求,设计合理的数据库表结构和数据字典。第5章平台实现与测试介绍平台的实现过程,包括环境搭建、编码实现和测试等环节。5.1环境搭建与配置搭建开发环境,配置必要的软件和工具。5.2编码实现按照设计要求,编写平台的前后端代码。5.3平台测试与优化对平台进行测试,发现并解决问题,优化平台性能。第6章结论与展望总结论文的研究成果,展望未来的研究方向和应用前景。6.1研究结论概括论文的主要研究内容和取得的成果。6.2未来研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值