事件就是用户对图形的操作,在android手机和平板电脑上,主要包含物理按键事件和触摸屏事件两类。物理按键事件包含:按下、抬起、长按等;触摸屏事件主要包含按下、抬起、滚动、双击等。
在View中提供了onTouchEvent()方法,可以重写该方法来处理触摸屏事件,适用于重写组件的场景;android中还提供了setOnTouchListener()方法为组件设置监听器来处理触摸屏事件。
在android中提供啦两种方式的事件处理,一种是基于监听的事件处理,一种是基于回调的事件处理。
一、基于监听的事件处理
实现基于监听的事件处理,主要做法就是为android的UI组件绑定特定的事件监听器,在事件监听的处理模型中,主要有三个对象:
①、Event Source(事件源):即产生事件的来源,通常是各种组件,例如:按钮、窗口、菜单等
②、Event(事件):事件中封装了UI组件上发生的特定事件的具体信息,如果事件需要获取UI组件上所发生事件的相关信息,一般通过Event对象来传递
③、Event Listener(事件监听器):监听事件源所发生的事件,并对不同的事件做出相应的相应
二、基于回调的事件处理
实现基于回调的事件处理,就是重写Android组件特定的回调方法或重写Activity的回调方法。为了使用回调机制来处理GUI组件(图形用户界面)上所发生的事件,需要为该组件提供对应的事件处理方法,可以通过继承GUI组件类,并重写该类的事件处理方法来实现。
View类中包含的一些事件处理的回调方法:
①、Boolean onKeyDown(int keyCode,keyEvent event) 当用户在该组件上按下某个按键时触发
②、Boolean onKeyLongPress(int keyCode,KeyEvent event) 当用户在该组件上长按某个按键时触发
③、Boolean onKeyShortcut(int keyCode,KeyEvent event) 当一个键盘快捷键事件发生时触发
④、Boolean onKeyUp(int keyCode,KeyEvent event) 当用户在该组件上松开某个按键时触发
⑤、Boolean onTouchEvent(MotionEvent event) 当用户在该组件上触发触摸屏事件时触发
⑥、boolean onTrackballEvent(MotionEvent event) 当用户在该组件上触发轨迹球事件时触发
一般来说,基于回调的事件处理方式可用于处理一些通用性的事件,事件处理的代码会比较简洁。但对于某些特定的事件,无法采用基于回调的事件处理方式实现时,就只能采用基于监听的事件处理方式。
三、物理按键事件处理
①、Android设备可用物理按键及其触发事件
音量键 KEYCODE_VOLUME_UP / KEYCODE_VOLUME_DOWN 控制当前上下音量,如音乐播放器、手机铃声、通话音量
返回键 KEYCODE_BACK 返回到前一个界面
菜单键 KEYCODE_MENU 显示当前应用的可用菜单
②、在android中处理物理按键事件时,常用的回调方法:
onKeyUp() 当用户松开某个按键时触发该方法
onKeyDown() 当用户按下(未松开)某个按键时触发该方法
onkeyLongPress() 当用户长按某个按键时触发该方法
③、获取系统时间:system.currentTimeMillis()
四、触摸屏事件处理
①、单机事件
在手机应用中,经常需要实现在屏幕中单机某个按钮或组件执行一些操作,这时就需要通过单机事件来完成。在处理单机事件时,可以通过为组件添加单击事件监听器的方法来实现。android为组件提供了setOnClickListener()方法,用于为组件设置单击事件监听器。该方法的参数是一个View.OnClickListener接口的实现类对象。View.OnClickListener接口定义如下:
1 pubic static interface View.OnClickListener{ 2 public void onClick(View v); 3 4 }
在实现View.OnClickListener接口时,需要重写onClick()方法。当单击事件触发后,将调用onClick()方法执行具体的事件处理操作。
ag:为button的按钮添加一个单击事件监听器,并且实现单击该按钮时弹出消息提示显示:单击了按钮,代码如下:
Button button =new Button(this) button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ Toast.makeText(MainActivity.this,"单击了按钮",Toast.LENGTH_SHORT).show(); } });
②、长按事件
长按事件不同于单击事件,长按事件需要长按某一个组件2秒之后才会触发。在处理长按事件时,可以通过为组件添加长按事件监听器的方法来实现。android为组件提供了setOnLongClickListener()方法,用于为组件设置长按事件监听器,该方法的参数是View.OnLongClickListener接口的实现类对象,接口定义如下:
1 public static interface View.OnLongClickListener{ 2 3 public void onLongClick(View v) 4 5 }
在实现View.OnLongClickListener接口时,需要重写onLongClick()方法。当长按事件触发后,将调用onLongClick()方法执行具体的事件处理操作。