Android事件

事件

事件
在Android程序中,大部分都是图形界面,这些界面都是通过事件来实现人机交互的。Android中的事件主要有两种。

  1. 键盘事件:主要是指设备上的物理按键事件,例如,后退键的按下、菜单键的弹起等事件。
  2. 触摸事件:主要指的是对程序界面上的一些控件所做的动作,例如,双击、滑动等操作。

事件处理机制
针对Android中的事件,Android平台提供了两种事件处理机制

  1. 基于回调机制的事件处理

在Android平台中,每个View都有自己处理事件的回调方法,开发人员可以通过重写View中的这些回调方法来实现需要的响应事件,当某个事件没有被任何一个View处理时,便会调用Activity中相应的回调方法。

当用户与UI控件发生某个事件(如按下事件、滑动事件、双击事件)时,程序会调用控件自己特定的方法处理该事件,这个处理过程就是基于回调机制的事件处理。基于回调机制的事件处理包含处理物理按键事件和处理触摸事件。
(1)键盘事件

  1. onKeyDown()方法
    当Android设备上的物理按键被按下时,程序会回调onKeyDown()方法,该方法是接口KeyEvent.Callback中的抽象方法。Android程序中所有的View都实现了KeyEvent.Callback接口并重写了onKeyDown()方法,该方法主要用于捕捉手机键盘被按下的事件
public boolean onKeyDown(int keyCode,KeyEvent event)
  • keyCode:表示被按下的键值
  • event:表示按键事件的对象,其中包含了触发事件的详细信息,例如事件的状态、事件的类型、事件的发生时间等
  1. onKeyUp()方法
    当Android设备上的物理按键弹起时,程序会回调onKeyUp()方法,该方法是接口KeyEvent.Callback中的抽象方法。Android程序中所有的View都实现了KeyEvent.Callback接口并重写了onKeyUp()方法,该方法主要用于捕捉手机键盘弹起的事件
public boolean onKeyUp(int keyCode,KeyEvent event)
  • onKeyUp()方法的2个参数的含义与onKeyDown()方法中对应参数的含义一样。

(2)触摸事件

  1. onTouchEvent()方法
    该方法是在View中进行定义的,并且所有View的子类中全部重写了onTouchEvent()方法,Android程序可以通过该方法处理屏幕的触摸事件
public boolean onTouchEvent(MotionEvent event)
  • 返回值为true时,表示已经完整地处理了事件,并不希望其他的回调方法继续对其进行处理,而为false时,表示并没有完全处理完事件,更希望其他回调方法继续对其进行处理

一般情况下,onTouchEvent()方法处理的事件分为三种

  • MotionEvent.ACTION_DOWN:鼠标按下时
  • MotionEvent.ACTION_UP:弹起事件
  • MotionEvent.ACTION_MOVE:滑动事件
  1. onFocusChanged()方法
    onFocusChanged()方法只能在View中重写。onFocusChanged()方法是焦点改变的回调方法,当某个控件重写了该方法后,焦点发生变化时,会自动调用该方法来处理焦点改变的事件
protected void onFocusChanged(boolean gainFocus,int direction,Rect previouslyFocusedRect)
  • gainFocus:表示触发该事件的View是否获得了焦点,是为true
  • direction:表示焦点移动的方向
  • previouslyFocusedRect:表示在触发事件的View的坐标系中,前一个获得焦点的矩形区域,如果该参数不可以,则设置为null
  1. 基于监听接口的事件处理

基于监听接口的事件处理,最常见的做法就是为Android界面组件绑定特殊的事件监听器,例如,绑定点击事件的监听器OnClickListener。

(1)简介
基于监听事件处理是一种更“面向对象”的事件处理,在事件监听的处理模型中主要涉及三个对象

  • EventSource(事件源):事件发生的场所,通常是指各个组件
  • Event(事件):封装了界面组件发生的特定信息(通常指用户的一次操作)
  • Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件作出相应的响应

(2)流程

  1. 为某个事件源(界面组件)设置一个监听器,用于监听用户操作
  2. 当用户操作时,会触发事件源的监听器
  3. 生成对应的事件对象
  4. 将生成的事件对象作为参数传递给事件监听器
  5. 事件监听器对事件对象进行判断,执行对应的事件处理器

(3)View类中的内部接口

  1. OnClickListener接口
    单击事件的事件监听器必须实现的接口
public void onClick(View v)
  • v表示事件发生的事件源
  1. OnLongClickListener接口
    长按事件的事件监听器必须实现的接口
public boolean onLongClick(View view)
  • view:为事件源控件,当长时间按下该控件时才会触发该方法
  • 返回值:该方法的返回值是一个boolean类型的变量,当该变量为true时,表示已经完整地处理了长按事件,并不希望其他回调方法继续对其进行处理
  1. OnFocusChangeListener接口
    焦点改变事件的事件监听器必须实现的接口
public void onFocusChange(View v,boolean hasFocus)
  • v:表示触发焦点发生改变事件的事件源
  • hasFocus:表示v是否获取焦点
  1. OnKeyListener接口
    按键事件的事件监听器必须实现的接口
public boolean onKey(View v,int keyCode,KeyEvent keyEvent)
  • v:表示事件的事件源
  • keyCode:表示键盘的键盘码
  • keyEvent:表示键盘事件封装类的对象,其中包含了事件的详细信息
  1. OnTouchListener接口
    触摸事件的事件监听器必须实现的接口
public boolean onTouch(View v,MotionEvent motionEvent)
  • v:表示事件源
  • motionEvent:表示事件封装类的对象,其中封装了触摸事件的详细信息,同样包括事件的类型、触发时间等信息
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值