在Android中有俩种事件处理方式:基于监听的事件处理、基于回调的事件处理
基于监听的事件处理:
主要是为UI组件绑定特定的事件监听器。在事件监听的处理模型中主要有三类对象:1.事件监听器:主要用于监听事件源所发生的的事件,并对不同的事件作出相应的响应。2.事件源:即事件产生的来源,一般情况下是指各种组件。3.事件:在事件中封装了UI组件上发生的特定事件的具体信息,如果监听器要获取这个UI组件上所发生的事件的相关信息,一般情况都是通过这个事件对象进行传递。
三者之间的关系:首先需要将事件监听器注册到事件源当中,然后由外部动作触发事件源上的事件并生成事件对象,再将触发事件监听器的事件作为参数传入到事件处理器当中,最后调用事件处理器作出响应。这就是一个事件的处理流程。
基于回调的事件处理:
主要做法是重写Android组件特定的回调方法或者是重写Activity的回调方法。(回调方法:可以理解为当某一个事件发生时所调用的方法)从代码实现的角度来看,基于回调的事件处理方式更为简单,也就是说要处理哪个事件就重写哪一个回调方法。通常情况下经常重写的方法有:onTouchEvent、onKeyDown、onKeyUp。
区别:
基于回调的事件处理方式主要用来处理一些通用性的事件,代码较为简洁。基于监听的事件处理方式主要用来处理某些特定的事件。
物理按键事件处理:
物理按键就是指手机上真实存在的按键。在Android中为每一个按键都提供了三个方法分别针对不同的状态:1.按下状态:按下某个按键但没有松开的状态(onKeyDown()方法);2.抬起状态:当松开某个按键时的状态(onKeyUp()方法);3.长按状态:长按某个按键时触发的状态(onKeyLongPress()方法)。
触摸屏事件处理:
常用的事件主要有单击事件、长按事件、触摸事件。
单击事件:可以通过为组件添加单击事件监听器来实现。Android中提供了setOnClickListener()方法来实现,这个方法只有一个入口参数,即OnClickListener接口实现类对象。因为OnClickListener接口的实现类当中包含了一个onClick(View v)方法,所以在创建这个接口的实现类的对象时就必须重写这个方法。这个onClick()方法主要是单击对象之后所触发的方法。一般情况下在这个方法中编写具体事件处理操作的代码、
长按事件:可以通过为组件添加长按事件监听器来实现。Android提供了setOnLongClickListener()方法,参数是OnLongClickListener接口实现类对象。实现这个接口需要重写onLongClick()方法。这个方法是长按事件触发以后调用。通常情况下在这个方法中编写具体事件处理操作的代码。
触摸事件:当用户触摸屏幕之后产生的事件。在屏幕划过时可以通过触摸事件获取当前坐标,在处理触摸事件时,可以通过为组件添加触摸事件监听器来实现。在Android中提供了setOnTouchListener()方法用来为组件设置触摸事件监听器,入口参数为OnTouchListener接口实现类对象。实现这个接口需要重写onTouch()方法,在这个方法中编写具体事件处理操作的代码。(在创建触摸事件监听器的时候会产生一个MotionEvent对象,这是一个事件类的对象。MotionEvent对象是用来保存发生触摸的位置、时间等细节信息)
单击事件和触摸事件的区别:
Android在执行的时候会先触发onTouch事件,如果onTouch事件没有完全消费掉这个事件,那就触发onClick事件。(消费事件就是指一次UI操作是否完成响应,如果在重写的事件中返回true,那就是完成响应,否则就表示没有完成,则交给后面的事件去处理)
单击事件触发一个动作,触摸事件触发俩个动作。
手势检测
Android为手势检测提供了一个GestureDetector类,这个类代表一个手势检测器。创建这个类的对象的时候需要传入一个GestureDetector.OnGestureListener接口的实例。这个接口代表一个监听器,用来对用户的手势行为提供一个响应。实现这个实例必须重写6个方法。
onDown():当触摸事件按下时触发
onFling():当用户的手指在触摸屏上拖过时触发
onLongPress():当长按时触发
onScroll():当滚动某个元素时触发
onShowPress():当用户按下按键后100ms还没有松开或者移动时触发
onSingleTapUp():当轻击时触发
创建手势:
在Android模拟器中提供了创建手势的应用Gestures Builder。在这个应用中可以使用Add gesture来添加手势或者使用Reload来导入手势。创建时先在name处输入手势所要表达的意思,然后在下方空白处绘制自定义手势。
在AndroidStudio中打开DDMS视图,选中当前模拟器,再选择File Explorer文件管理器,选择storage节点下英文和数字组成的一个节点并展开,其中有一个gestures文件,这个文件就是创建的手势文件,可以将其导出。