`
wo_deqing
  • 浏览: 64229 次
文章分类
社区版块
存档分类
最新评论

Android 之事件处理

 
阅读更多

Android 之事件处理(一)基于回调机制的事件处理


Android平台的事件处理机制有两种,一种是基于回调机制的,一种是基于监听接口的,现介绍第一种:基于回调机制的事件处理。
Android平台中,每个View都有自己的处理事件的回调方法,开发人员可以通过重写View中的这些回调方法来实现需要的响应事件。当某个事件没有被任何一个View处理时,便会调用Activity中相应的回调方法。Android提供了以下回调方法供用户使用:
1. onKeyDown:
功能:该方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该方法,该方法用来捕捉手机键盘被按下的事件。
声明:public boolean onKeyDown (int keyCode, KeyEvent event)
参数说明:
  参数keyCode,该参数为被按下的键值即键盘码,手机键盘中每个按钮都会有其单独的键盘码,在应用程序都是通过键盘码才知道用户按下的是哪个键。
参数event,该参数为按键事件的对象,其中包含了触发事件的详细信息,例如事件的状态、事件的类型、事件发生的时间等。当用户按下按键时,系统会自动将事件封 装成KeyEvent对象供应用程序使用。
返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。

2. onKeyUp:
功能:该方法同样是接口KeyEvent.Callback中的一个抽象方法,并且所有的View同样全部实现了该接口并重写了该方法,onKeyUp方法用来捕捉手机键盘按键抬起的事件。
 声明:public boolean onKeyUp (int keyCode, KeyEvent event)
 参数说明: 同onKeyDown

3. onTouchEvent:

功能:该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件。

 声明:public boolean onTouchEvent (MotionEvent event)

 参数说明: 

   参数event:参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。

   返回值:该方法的返回值机理与键盘响应事件的相同,同样是当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回 false。

 详细说明:

  该方法并不像之前介绍过的方法只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,只是三种情况中的动作值不同。

屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()的值为 MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,只需重新该回调方法,然后在方法中进行动作的判断即可。
屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。当 MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。
在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()方法来判断动作值是否为 MotionEvent.ACTION_MOVE再进行处理。

4. onTrackBallEvent:
   功能: 接下来将介绍的是手机中轨迹球的处理方法onTrackBallEvent。所有的View同样全部实现了该方法。
   声明: public boolean onTrackballEvent (MotionEvent event)
   详细说明:该方法的使用方法与前面介绍过的各个回调方法基本相同,可以在Activity中重写该方法,也可以在各个View的实现类中重写。
   参数event:参数event为手机轨迹球事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等,一般情况下,该对象会在用户操控轨迹球时被创建。
   返回值:该方法的返回值与前面介绍的各个回调方法的返回值机制完全相同,因本书篇幅有限,不再赘述。
   轨迹球与手机键盘的区别如下所示:
     1) 某些型号的手机设计出的轨迹球会比只有手机键盘时更美观,可增添用户对手机的整体印象。
     2) 轨迹球使用更为简单,例如在某些游戏中使用轨迹球控制会更为合理。
     3)使用轨迹球会比键盘更为细化,即滚动轨迹球时,后台的表示状态的数值会变化得更细微、更精准。
   提示:在模拟器运行状态下,可以通过F6键打开模拟器的轨迹球,然后便可以通过鼠标的移动来模拟轨迹球事件。

5.  onFocusChanged:
   功能: 前面介绍的各个方法都可以在View及Activity中重写,接下来介绍的onFocusChanged却只能在View中重写。该方法是焦点改变的回调方法,当某个控件重写了该方法后,当焦点发生变化时,会自动调用该方法来处理焦点改变的事件。
   声明:protected void onFocusChanged (boolean gainFocus, int direction, Rect previously FocusedRect)
   详细说明:
     参数gainFocus:参数gainFocus表示触发该事件的View是否获得了焦点,当该控件获得焦点时,gainFocus等于true,否则等于false。
     参数direction:参数direction表示焦点移动的方向,用数值表示,有兴趣的读者可以重写View中的该方法打印该参数进行观察。
     参数previouslyFocusedRect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,即表示焦点是从哪里来的。如果不可用则为null。
   提示:
      焦点:焦点描述了按键事件(或者是屏幕事件等)的承受者,每次按键事件都发生在拥有焦点的View上。在应用程序中,我们可以对焦点进行控制,例如从一个 View移动另一个View。下面列出一些与焦点有关的常用方法:
       setFocusable方法:设置View是否可以拥有焦点。
       isFocusable方法:监测此View是否可以拥有焦点。
       setNextFocusDownId方法:设置View的焦点向下移动后获得焦点View的ID。
       hasFocus方法:返回了View的父控件是否获得了焦点。
       requestFocus方法:尝试让此View获得焦点。
       isFocusableTouchMode方法:设置View是否可以在触摸模式下获得焦点,在默认情况下是不可用获得的。



Android 之事件处理(二)基于监听的事件处理

上一篇文章介绍了事件处理的第一种方法--基于回调的事件处理,接下来说一下第二种--基于监听的事件处理。对于Android基于监听的事件处理而言,主要的做法就是为Android界面组件绑定特定的事件监听器(Listener)。

1. OnClickListener接口:
   功能:该接口处理的是点击事件。在触控模式下,是在某个View上按下并抬起的组合动作,而在键盘模式下,是某个View获得焦点后点击确定键或者按下轨迹球事件。
   对应的回调方法:public void onClick(View v)
   说明:需要实现onClick方法,参数v便为事件发生的事件源。

2. OnLongClickListener接口:
   功能:OnLongClickListener接口与之前介绍的OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件。
   对应的回调方法:public boolean onLongClick(View v)
   说明:需要实现onLongClick方法。
   参数v:参数v为事件源控件,当长时间按下此控件时才会触发该方法。
   返回值:该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理;当返回 false时,表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。

3. OnFocusChangeListener接口:
   功能:OnFocusChangeListener接口用来处理控件焦点发生改变的事件。如果注册了该接口,当某个控件失去焦点或者获得焦点时都会触发该接口中的回调方法。
   对应的回调方法:public void onFocusChange(View v, Boolean hasFocus)
   说明:需要实现onFocusChange方法。
   参数v:参数v便为触发该事件的事件源。
   参数hasFocus:参数hasFocus表示v的新状态,即v是否是获得焦点。

4. OnKeyListener接口:
   功能:OnKeyListener是对手机键盘进行监听的接口,通过对某个View注册该监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。
   对应的回调方法:public boolean onKey(View v, int keyCode, KeyEvent event)
   说明:需要实现onKey方法。
   参数v:参数v为事件的事件源控件。
   参数keyCode:参数keyCode为手机键盘的键盘码。
   参数event:参数event便为键盘事件封装类的对象,其中包含了事件的详细信息,例如发生的事件、事件的类型等。

5. OnTouchListener接口:
   功能:OnTouchListener接口是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
   对应的回调方法:public boolean onTouch(View v, MotionEvent event)
   说明:需要实现onTouch方法。
   参数v:参数v同样为事件源对象。
   参数event:参数event为事件封装类的对象,其中封装了触发事件的详细信息,同样包括事件的类型、触发时间等信息。

6. OnCreateContextMenuListener接口:
   功能:OnCreateContextMenuListener接口是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式。
   对应的回调方法:public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo info)
   说明:需要实现onCreateContextMenu方法。
   参数menu:参数menu为事件的上下文菜单。
   参数v:参数v为事件源View,当该View获得焦点时才可能接收该方法的事件响应。
   参数info:info对象中封装了有关上下文菜单额外的信息,这些信息取决于事件源View。
   该方法会在某个View中显示上下文菜单时被调用,开发人员可以通过实现该方法来处理上下文菜单显示时的一些操作。其使用方法与前面介绍的各个监听接口没有任何区别。

分享到:
评论

相关推荐

    Android键盘事件处理例子

    总结,Android键盘事件处理是开发者必须掌握的基本技能之一。理解软键盘和硬件键盘事件的区别,学会使用TextWatcher和KeyListener,以及如何控制软键盘的显示与隐藏,将有助于构建更加用户友好的Android应用程序。...

    Android 事件处理机制

    Android事件处理机制

    Android应用程序输入事件处理机制

    在Android应用程序中,有一类...这个PPT讲Android应用程序输入事件的分发和处理过程,主要涉及到输入管理InputManager、输入事件监控线程InputReader、输入事件分发线程InputDispatcher,以及应用程序主线程消息循环。

    Android事件处理.ppt

    Android事件处理

    android之Touch事件处理机制测试

    本文将深入探讨“android之Touch事件处理机制测试”,包括滑动事件冲突的解决、ViewGroup中的事件触发和传递机制。 一、Android Touch事件处理机制 1. 触摸事件流程:在Android中,触摸事件分为三个阶段,即ACTION...

    Delphi Android 广播事件处理

    在Delphi中,广播接收器是Android应用程序组件之一,用于监听并响应系统或自定义广播事件。例如,在这个特定的项目中,我们关注的是"手机屏幕点亮"的广播事件。当用户解锁设备或屏幕被点亮时,我们的广播接收器会...

    Android事件处理机制详解及源码

    Android事件处理机制是Android...总之,Android事件处理机制是开发者必须掌握的核心技能之一,它涉及到用户交互、事件分发和事件消费等多个环节。通过深入学习和实践,我们可以创建更加响应灵敏、用户友好的应用程序。

    Android事件处理

    3.1 Android事件处理概述 3.2 基于监听的事件处理 3.3 基于回调的事件处理 3.4 响应的系统设置的事件 3.5 Handler消息传递机制

    基于Android平台的事件处理

    基于Android平台的事件处理是Android应用开发中的核心内容之一。通过理解不同类型的事件及其处理方式,开发者能够构建出功能丰富、用户体验良好的应用程序。此外,熟悉Android平台的架构和基本组件对于高效开发也是...

    android事件的处理模型和多线程的处理方法

    首先,Android事件处理主要围绕Input子系统进行,它包含了键盘、触摸屏等设备输入的管理和分发。InputManager是这一子系统的核心,它在Java层和C++层都有相应的实现。在Java层,WindowManagerService创建Input...

    Android 按钮事件处理----Button

    android:id="@+id/toggleButton01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/app_close"/> android:id="@+id/imageButton01" android:layout_...

    自己写的android事件分发拦截处理的代码可以清楚知道事件分发拦截和处理的过程.rar

    综上所述,这个压缩包中的代码可以帮助开发者深入理解Android事件分发的机制,并提供实际的代码示例,以便学习如何拦截和处理触摸事件。不过,由于描述中提到部分代码可能不可用,因此实际使用时可能需要进行调整。...

    android 时钟事件处理-----AnalogClock/DigitaClock

    时钟事件处理,显示签到时间,初学者实用。 android:id="@+id/analogClock01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"/> ...

    Android 事件处理机制 demo

    在Android应用开发中,事件处理机制是至关重要的组成部分,它涉及到用户与应用程序的交互,包括点击、滑动等各类操作。本示例"Android 事件处理机制 demo"将深入探讨这一主题,通过实际代码演示如何有效地管理和响应...

    android事件处理

    Android事件处理系统允许应用程序响应用户的触摸、键盘输入、网络变化等各种事件。本篇将详细解析Android事件处理机制,特别是基于给定的"android 事件处理demo",我们将深入探讨如何在实际应用中处理触摸事件。 ...

    Android home键监听事件处理

    Android APP开发过程中处理,home键点击事件,监听点击home键,做具体处理

    android广播事件处理案例

    完整的广播事件处理案例,很经典的。适合初级android开发人员使用。在处理广播事件上,这个资源都包含在里面了。

    Android事件分发处理

    在Android系统中,事件分发处理是用户界面交互的核心机制,尤其对于触摸...例如,`ButtonClickEvent`可能是一个用于深入研究按钮点击事件处理的示例,它可以帮助我们更好地理解事件处理在Android应用开发中的实际应用。

    [android][Android点击事件分发机制分析]

    3. **事件处理**:每个View的`onTouchEvent()`方法负责处理实际的事件。如果`onTouchEvent()`返回true,表示事件已被当前View消费,事件流结束;如果返回false,事件会回溯到上一级View。 4. **ACTION_DOWN与ACTION...

Global site tag (gtag.js) - Google Analytics