Android手机的用户与应用程序之间的交互是通过事件处理来完成的。各控件在不同情况下触发的事件也不尽相同,所产生的事件对象也可能不同。
从处理方法来说,Android的事件处理有“基于回调机制”(回调就是客户端程序Client调用服务程序Service中的某个函数A,然后服务程序Service又在某个时候反过来调用客户程序Client中的某个函数B,Server约定了B的接口规范)的处理方法和“基于监听接口事件”(将事件源与事件监听器联系在一起,就需要为事件源注册监听事件。当事件发生时,系统自动通知事件监听器处理相应的事件)的处理方法;从另一个角度来看,有使用事件监听器(Event Listeners)来处理事件的,也有的是使用Event Handlers来处理事件的。
常见的事件监听器方法有:1.View.OnClickListener():当前View被点击时,或者当前View获得焦点时调用这个监听器方法,并触发其中的onClick(View v)方法。2.View.OnFocusChangeListener():当前View焦点变化时该方法被调用,并触发其中的onFocusChange()方法。3. View.OnKeyListener():当前组件获得焦点,或者用户按下键时,调用该方法,并触发其中的onKey()方法。4. View.OnTouchListener():当触摸事件传递给当前组件时,注册在当前组件内部的OnTouchListener会被执行并触发其中的onTouch()方法。其中,onTouch方法的常用代码块如下:
public boolean onTouch (View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//具体的处理逻辑
break;
case MotionEvent.ACTION_MOVE:
//具体的处理逻辑
break;
case MotionEvent.ACTION_UP:
//具体的处理逻辑
break;
}
return false;
}
基于回调机制的事件处理方法之一------------onTouchEvent()方法:
onTouch是View中OnTouchListener接口中的方法,它处理View及其子类被touch时的事件;onTouchEvent()也是在View中定义的一个方法,处理传递到View的手势事件,包括ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL四种事件。应用程序可以通过该方法处理手机屏幕的触摸事件。该方法一般出现在Activity中的位置是在onCreate(Bundle savedInstanceState)方法之后,在定义public boolean onTouchEvent (MotionEvent event)方法中,根据侦听得到的不同情况分别处理之。该方法一般在View中或Activity中重写。参数event为手机屏幕触摸事件封装类的对象,它封装了该事件的所有信息,如触摸的位置、类型(如屏幕被按下的MotionEvent.getAction()的值为MotionEvent.ACTION_DOWN;被抬起的MotionEvent.getAction()的值为MotionEvent.ACTION_UP;在屏幕中拖动时的MotionEvent.getAction()的值为MotionEvent.ACTION_MOVE)、时间等。该对象会在用户触摸手机屏幕时被创建。其返回值,当已经完整地处理了该事件且不希望其他回调方法再次处理时返回true,否则返回false。onTouchEvent方法的常用代码块如下:
public boolean onTouchEvent (MotionEvent event) {
switch (event.getAction()){ //根据用户按键情况进行不同的处理
case MotionEvent.ACTION_DOWN: //屏幕被按下
//进行业务逻辑处理
break;
case MotionEvent.ACTION_MOVE: //移动
//进行业务逻辑处理
break;
case MotionEvent.ACTION_UP: //屏幕被抬起
//进行业务逻辑处理
break;
}
return super.onTouchEvent(event);
}
基于监听接口的事件处理方法之一------------------onClick()方法:
在触控模式下,它是在某个View上按下并抬起的组合动作;在键盘模式下它是某个View获得焦点后,点击确定键的事件。该接口对应的回调方法如下:public void onClick (View v)//注:参数v就是事件发生的事件源。代码中onClick(View v)调用监听器中相应的事件处理方法来处理事件并给出响应。onClick方法的常用代码块如下:
public void onClick(View v) {
switch(v.getId()){//注意这里的getId()的用法
case R.id.XX1:
//进行业务逻辑处理
break;
case R.id. XX2 :
//进行业务逻辑处理
break;
case R.id.button03:
//进行业务逻辑处理
break;
}
}
如果使用了多个事件源,给每个事件源注册监听事件,可以使用上面的onclick()方法,针对不同的事件源分别进行业务处理,如果仅有一个事件源就没有必要使用switch了,直接写事件处理逻辑即可。