基于监听的事件处理
- 监听处理模型:
- Event Sourse(事件源)
- Event(事件):用户的一次操作会封装在事件中,一般通过Event对象获得界面组建的事件信息
- Event Listener: 监听事件源发生的事件并对其作出响应
- 委派式事件处理方式: 每个组件可为特定事件指定一个事件监听器,每个事件监听器可以监听一个或者多个事件源。
- 基于监听的事件处理模型编程步骤:
- 获取事件源即监听对象
- 将事件监听器绑定至事件源上(可以使用匿名内部类)
- 实现事件处理器
事件和事件监听器
参见实例
- 内部类形式:将事件监听器设置为当前类的内部类
- 外部类形式:将事件监听器设置为当前类的外部类
- 匿名内部类:。。。(推荐)
- Activity本身实现监听器接口并实现事件处理
- 绑定标签:onClick属性(常用)
基于回调的事件处理
- 回调机制与监听机制
** 包含的方法 **
boolean onKeyDown(int keyCode, KeyEvent Event):用户按下某个按键时触动该方法
boolean onKeyLongPress(int keyCode,KeyEvent event):
boolean onKeyShortCut(int keyCode, KeyEvent event):当一个键盘快捷键事件发生调用此方法
boolean onKeyUp(...):当用户松开某个组件调用该方法
boolean onTouchEvent(MotionEvent event): 用户触发触摸屏事件调用
boolean onTrackballEvent(MotionEvent event):触发轨迹球事件调用
- ** 示例 ** :
public class MyButton extends Button{
public MyButton(Context Context, AttributeSet set){
super(context, set);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
super.onKeyDown(keyCode,KeyEvent);
Log.v("-crazyit.org-","the onKeyDown is in my button");
return true;//返回true,表明事件不会向外扩散;
}
}
- 基于监听与基于回调的处理模型的区别:
<pre> 事件源与事件监听器是分离的,当事件源上发生特定的事件时交给事件监听器处理;对于基于回调的事件处理模型,事件源与监听器是统一的,当事件源发生特定事件时该事件还是由事件源本身负责处理
基于回调的事件的传播
- 关于回调事件方法中的boolean返回值,其用于标示该处理方法能否完全处理该事件,返回true表示可以并不会传播出去,返回false则相反,该事件会传播出去
- 若该事件可以传播到该Activity,则该组件所发生的事件不仅会激发该组件的回调方法也会激发该Activity上的回调方法
重写onTouchEvent方法响应触摸屏事件
实例** 通过回调实现跟随手指的小球 ** :
public class DrawView extends View{
public float currentX = 40;
public float currentY = 50;
//定义,创建画笔
Paint p = new Paint();
public DrawView(Context context,AttributeSet set){
super(context, set);
}
//重写onDraw()方法
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
p.setColor(Color.RED);
canvas.drawCircle(currentX, currentY, 15, p);
}
//创建onTouchEvent()
public boolean onTouchEvent(MotionEvent event){
//设置当前组件的currentX与currentY属性
this.currentX = event.getX();
this.currentY = event.getY();
//通知组件重绘
this.invalidate();
//返回true表明处理方法以经处理完该事件
return true;
}
}
** xml清单: **
<LinearLayout>
<com.juanxincai.test.DrawView
android:orientation:xxx
android:layout_width:xxx
android:layout_height:xxx/>
</LinearLayout>
响应系统设置事件
Configuration类简介
程序可调用Aactivity的如下方法获得Cconfiguration类对象:
<pre> Configuration cfg = getResourses().getConfiguration();</pre>
该类用于描述手机设备配置信息,具体方法参考
Configureration简介(自备梯子)