Android事件处理

一,基于监听的事件处理
        委托式的事件处理,即将事件处理交给事件监听器.为界面组件绑定特定的事件监听器
        优势:分工明确,维护性好. 保证监听事件会被优先触发
                | Event Source 事件源 任意界面组件都可作为事件源
                | Event 事件 无需关心,由系统产生
                | Event Listener 事件监听器 事件处理的核心,需要编写事件处理代码
        | Activity 本身作为事件监听器(实现监听器接口)
                缺点:程序结构混乱,容易引起混淆
        | 外部类作为事件监听器类
                缺点:不利于提高程序的内聚性,不能自由访问GUI界面的类中的组件,编程不够简洁  优点:多个GUI界面共享
        | 匿名内部类作为事件监听器类
                缺点:语法不容易掌握,代码重用性差. 优点:逻辑清晰,使用广泛
        | 直接保定标签 android:onClick="clickButton"
二,基于回调的事件处理
        事件源与事件监听器是统一的.
        重写Android组件的特定回调方法,可用于处理一些具有通用性的事件,基于回调的事件处理代码会比较简洁.但某些特定的事件无法使用.
                | onKeyDown(int keyCode,KeyEvent event) 在某个组件上按下某个按钮触发
                | onKeyLongPress(int keyCode,KeyEvent event) 在某个组件上长按某个按键触发
                | onKeyShortcutint keyCode,KeyEvent event) 当一个键盘快捷键事件发生时触发
                | onKeyUp(int keyCode,KeyEvent event) 在某个组件上松开某个按钮触发
                | onTouchEvent(int keyCode,KeyEvent event) 在某个组件上触发触摸屏事件触时触发
                | onTrackballEvent(int keyCode,KeyEvent event) 在某个组件上触发轨迹球屏幕事件时触发
        基于回调事件的处理方法都有一个boolean返回值,标识改方法是否能够完全处理该事件.如果是false,表示不能完全处理,该事件会被传播
三,响应系统设置的事件
        Configuration 用于描述手机设备上的配置信息,包含用户特定的配置项也包含系统的动态设备配置.
                | Configuration cfg = getResources().getConfiguration(); 获取Configuration对象
                        | public  float  fontScale 获取当前用户设置的字体的缩放因子        
                        | public int keyboard 获取当前设备所关联的键盘类型(KEYBOARD_NOKEYS,KEYBOARD_QWERTY( 普通电脑键盘),KEYBOARD_12KEYS(只有12个键的小键盘))
                        | public Locale locale 获取当前用户的Locale
        
                | public int mcc 获取移动信号的国家码
                        | public int mnc 获取移动信号的网路码
                        | public int navigation 判断系统上方导航设备的类型(NAVIGATION_NONAV(无导航),NAVIGATION_DPAD(DPAD导航),NAVIGATION_TRACKBALL(轨迹球导航),                                                        NAVIGATION_WHEEL(滚轮导航))
                        | public int orientation 获取系统屏幕的方向(ORIENTATION_LANDSCAPE(横向屏幕),ORIENTATION_PORTRAIT(竖向屏幕),ORIENTATION_SQUARE(方形屏幕))
                        | public int touchscreen 获取系统触摸屏的触摸方式(TOUCHSCREEN_NOTOUCH(无触摸),TOUCHSCREEN_STYLUS(触摸笔式的触摸),TOUCHSCREEN_FINGER(接受手指的触摸))
                        |
                | 重写onConfigurationChanged 响应系统设置更改        
                        需设置Activity相关监听事件,例如:监听屏幕改变事件;<activity android:configchanges="orientation" .../>
 四,Handler 消息传递机制
        出于性能考虑,Android 的UI操作并不是线程安全的,所以Android的UI线程只允许修改Activity的UI组件.修改UI的属性值需要借助Handler的消息传递机制来实现
                | 使用步骤 1,在启动的线程中发送消息,        2,在主线程中获取并处理消息        
                | final boolean handleMessage(Message msg) 处理消息的方法,一般用于被重写
                | final boolean hasMesssages(int what) 检查消息队列中是否包含what属性为属性为指定值的消息
                | final boolean hasMesssages(int what,Object obj) 检查消息队列中是否包含what属性为指定值且obj属性为指定对象的消息
                | 多个重载的 Message obtainMessage()获取消息
                | sendEmptyMessage() 发送空消息
                | final boolean sendEmptyMessageDelayed(int what,long delayMillis) 指定多少毫秒之后发送空消息
                | final boolean sendMessage(Message msg) 立即发送消息
                | final boolean sendMessageDelayed(Message msg,long delayMillis) 指定多少毫秒之后发送消息
        | Message Handler接收和处理的消息对象
        | Looper 每个线程只能有一个Looper,负责读取MessageQueue中的消息.读取后交给发送消息的Handler处理        
        | MessageQueue 消息队列(先进先出)
                程序使用Handler传递处理消息,消息必须被发送到指定的MessageQueue,由于MessageQueue是由Looper管理的. 如果希望Handler正常工作,必须保证当前线程中有一个Looper对象
                        | 当前UI线程中已经初始化了一个Looper对象
                        | 程序员自己启动的子线程,必须自己创建一个Looper对象,并启动它 Looper.prepare();创建 Looper.loop();启动
五,异步任务 AsyncTask
        AsyncTask<Params,Progress,Result> 抽象类,
                | Params 启动任务执行的输出参数类型,Progress后台的任务完成的进度值的类型,Result后台执行的任务完成后返回结果的类型
                | dolnBackground(Params...):后台线程将要完成的任务.该方法可以调用publishProgress(Progress... values) 方法更新任务的执行进度
                | onProgressUpdate(Progress... values) 在olnBackground(Params...)方法中调用publishProgress()方法更新任务进度后将会触发此方法
                | onPreExecute() 执行后台耗时操作前被调用.通是是完成一些初始化的操作
                | onPostExecute(Result,result) 当dolnBackground()完成后,会自动调用该方法,并将dolnBackground()的返回值传递给该方法.
        调用AsyncTask子类的实例的execute(Params... pro)开始执行耗时任务
                | 必须在UI线程中创建AsyncTask实例
                | 必须在UI线程中调用AsyncTask的execute方法
                | 以上方法(dolnBackground,onProgressUpdate...)有Android系统负责声明调用
                | 每个AsyncTask只能被执行一次,多次调用会引发异常
六.手势
        | GestureDetector 手势检测器 创建该实例需要传递一个GestureDetector.OnGestureListener实例
                | GestureDetector.OnGestureListener
                        | boolean onDown(MotionEvent e) 当触碰事件按下时触发该方法
                        | boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY) 当用户在触碰上拖过时触发该方法, velocityX,velocityY代表拖过动作在横                                        向纵向上的速度
                        | abstract void onLongPress(MotionEvent e) 当用户在屏幕上长按时触发该方法
                        | boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) 当用户在触屏上滚动时触发该方法
                        | void onShowPress(MotionEvent e) 当用户在触屏上按下而且还未移动和松开时触发该方法
                        | boolean onSiongleTapUp(MotionEvent e) 用户在触屏上轻击事件将触发该方法
        | GestureLibrarys 工具类,创建手势库
                | static GestureLibrary fromFile(String path) 从path代表的文件中加载手势库
                | static GestureLibrary fromFile(File path) 从path代表的文件中加载手势库
                | static GestureLibrary fromPrivateFile(Context context,String name) 从指定应用程序的数据文件夹中name文件中加载手势
                | static GestureLibrary fromRawResource(Context context,int resourceId) 从resourceId所代表的资源中加载手势
                | void addGesture(String entryName,Gesture gesture) 添加一个名为entryName的手势
                | Set<Stirng> getGesturesEntries() 获取该手势库中所有的手势名称
                | ArrayList<Gesture> getGestures(String entryName) 获取entryName对应的所有手势
                | ArrayList<Prediction> recognize(Gesture gesture) 从当前手势库中识别与gesture匹配的全部手势
                | void removeEntry(String entryName) 删除手势库中entryName对应的手势
                | void removeGesture(String entryName,Gesture gesture) 删除手势库中 entryName,gesture对应的手势
                | boolean save() 向手势库中添加或者删除手势后调用该方法保存手势库
        | GestureOverlayView 绘制手势组件
                | 手势监听器
                        | OnGestureListener
                        | OnGesturePerformedListener
                        | OnGesturingListener
七,自动朗读TTS
        | TextToSpeech(Context context,TextToSpeech.OnlnitListener listener)  构造器
                | setLanguage(Locale loc) 如过返回值是"TextToSpeech.LANG_GOUNTRY_AVAILABLE" 说明TTS可以支持所有的设置的语言,国家选项
                | speak(String text,int queueMode,HashMap<Stirng,String> params)把文文字转化成音频,播放转换后的音频
                        | queueMode TextToSpeech.QUEUE_FLUSH 调用speak方法时会中断当前实例正在运行的任务
                        | queueMode TextToSpeech.QUEUE_ADD 调用speak方法会把发音任务添加到当前发音任务之后
                | synthesizeToFile(String text,HashMap<String,String> params,String filename) 把文字转化成音频,并把音频保存成文件\
        




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值