android 事件处理

来源:互联网 发布:直销结算软件 编辑:程序博客网 时间:2024/06/05 18:29
在Android的应用中,用户与界面的交互操作会触发相应的事件。
在Android平台上,对事件的处理机制有两种:
基于回调机制的事件处理。
基于监听接口的事件处理。
View类提供了许多公用的捕获用户在界面上触发事件的方法。

为了捕获和处理事件,必须继承某个类(如View类),并重载这些方法,以便自己定义具体的处理逻辑代码。

onKeyDown(int, KeyEvent) – 按下一个键时调用。
第一个参数为int类型,为被按下的键的键值(即键盘码)。
注意:不同型号的手机中,键值可能不同。
第二个参数为按键事件的对象,封装了触发事件的详细信息。
返回值是boolean类型,当返回true时,表示已完整地处理了该事件。


onKeyUp(int, KeyEvent) – 释放一个键时调用。
第一个参数为int类型,为释放键的键值(即键盘码)。
第二个参数为事件封装类的对象,与onKeyDown方法中的含义相同。
返回值是boolean类型,与onKeyDown方法的返回值含义相同。


onKeyDown和onKeyUp的使用方法基本相同,用户如果需要对按键被按下或抬起时进行事件处理,可通过重写该方法实现。

onTouchEvent(MotionEvent) – 触摸屏幕时调用。
参数为手机屏幕触摸事件封装类的对象,封装了该事件的详细信息。
返回值是boolean类型,与键盘响应事件的返回值含义相同。
以下情形由onTouchEvent方法处理
屏幕被按下,此时getAxtion()的值为ACTION_DOWN。
屏幕被抬起,此时getAxtion()的值为ACTION_UP。
在屏幕中拖动,此时getAxtion()的值为ACTION_MOVE。

实例1:在屏幕区域内触摸滑动,捕捉按下、抬起事件的状态,滑动的坐标,触点压力,触点的大小等信息。
使用onTouchEvent(MotionEvent)事件。
在代码中将使用下列get…()方法:
使用MotionEvent.getAction()方法来获取屏幕被按下等事件的状态;
使用Event.getX(),Event.getY()方法来获取触点坐标值;
使用Event.getPressure()方法来获取触屏压力大小;
使用Event.getSize()方法来获取触点尺寸。
项目名:Activity_Touch
运行结果如图。


基于回调机制的事件处理
onTrackballEvent(MotionEvent) – 轨迹球移动时调用。
其参数与返回值和上面的方法相同。
轨迹球与手机键盘
轨迹球使用简单。
轨迹球比键盘操作表示状态的数据更细化。


在模拟器运行状态下,F6键打开模拟器轨迹球,用鼠标移动模拟轨迹球事件。


基于监听接口的事件处理
基于监听接口的事件处理模型中的两个对象。
事件源:指事件所发生的控件。
事件监听器:用来处理事件的对象,实现特定的接口,根据事件的不同重载不同的事件处理方法来处理事件。


将事件源与事件监听器联系到一起,需要为事件源注册监听。当事件发生时,系统会自动通知事件监听器来处理相应的事件。


事件处理过程:
为事件源对象添加监听器对象;
当事件发生时,系统会将事件封装成相应类型的事件对象,发送给注册到事件源的监听器对象; 
当监听器对象接收事件对象后,系统会调用监听器中相应的事件处理方法来处理事件并给出响应。


监听器接口与回调方法
OnClickListener
是处理单击事件的接口。
onClick():对应接口的回调方法。
setOnClickListener():为指定的View对象设置OnClickListener监听器。
触发事件的操作
在触摸模式下,View对象被按下并抬起。
在键盘模式下,View对象获得焦点后,单击 “确定”键或按下轨迹球。
OnLongClickListener 
是处理长按下事件的接口。
onLongClick():对应接口的回调方法。



监听器接口与回调方法
OnFocusChangeListener 
是处理控件焦点发生改变事件的接口。
onFocusChange():对应接口的回调方法。
OnKeyListener 
是对手机键盘进行监听的接口。
onKey():对应接口的回调方法。
OnTouchListener 
是处理手机屏幕事件的监听接口。
onTouch():对应接口的回调方法。这个方法处理触摸时间,包括在屏幕上按下,释放和移动手势时调用。 



监听器接口与回调方法
OnCreateContextMenuListener 
是处理上下文菜单显示事件的监听接口。
onCreateContextMenu():对应接口的回调方法。


为上述相应接口设置监听器对象方法:
set***Listener():将指定的View对象设置为***接口的监听器。


在构造方法中使用匿名内部类实现事件监听器接口
通常在activity组件的onCreate事件中直接定义,直接动作。代码如:

public void onCreate(Bundle savedInstanceState) {
    …
    Button button1 = (Button)findViewById(R.id. myButton1);
    button1.setOnClickListener(new View.OnClickListener() {
@Override
 public void onClick(View v) {
    …; 
  }
 });
     …
 }