第二课:Android的事件处理(基于回调)
来源:互联网 发布:聚宝盆直播软件安卓版 编辑:程序博客网 时间:2024/05/23 13:25
对于基于回调的事件处理模型来说,事件源与事件监听器是统一的,或者说事件监听器完全消失了。当用户在GUI组件上激发某个事件时,组件自己特定的方法将会负责处理该事件。
实现方法:集成GUI组件类,并重写该类的事件处理方法。
为了实现回调机制的事件处理,Android为所有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);当用户在该组件上触发轨迹球屏事件时触发该方法。
例1:基于回调的事件不扩散
MyButton.java
public class MyButton extends Button{public MyButton(Context context, AttributeSet set){super(context, set);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){super.onKeyDown(keyCode, event);Log.v("-crazyit.org-", "the onKeyDown in MyButton");// 返回true,表明该事件不会向外扩散return true;}}
例2:基于回调的事件传播
MyButton.java
public class MyButton extends Button{public MyButton(Context context , AttributeSet set){super(context , set);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-MyButton-" , "the onKeyDown in MyButton");// 返回false,表明并未完全处理该事件,该事件依然向外扩散return false;}}
Propagation.java
public class Propagation extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bn = (Button) findViewById(R.id.bn);// 为bn绑定事件监听器bn.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View source, int keyCode, KeyEvent event){// 只处理按下键的事件if (event.getAction() == KeyEvent.ACTION_DOWN){Log.v("-Listener-", "the onKeyDown in Listener");}// 返回false,表明该事件会向外传播return true; // ①}});}// 重写onKeyDown方法,该方法可监听它所包含的所有组件的按键被按下事件@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-Activity-" , "the onKeyDown in Activity");//返回false,表明并未完全处理该事件,该事件依然向外扩散return false;}}
例3:重写onTouchEvent方法响应触摸屏事件
DrawView.java
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);}@Overridepublic void onDraw(Canvas canvas){super.onDraw(canvas);// 设置画笔的颜色p.setColor(Color.RED);// 绘制一个小圆(作为小球)canvas.drawCircle(currentX, currentY, 15, p);}@Overridepublic boolean onTouchEvent(MotionEvent event){// 当前组件的currentX、currentY两个属性this.currentX = event.getX();this.currentY = event.getY();// 通知改组件重绘this.invalidate();// 返回true表明处理方法已经处理该事件return true;}}
源代码点击下载
0 0
- 第二课:Android的事件处理(基于回调)
- 【Android事件的处理】---基于回调的事件处理
- Android基于回调的事件处理
- Android基于回调的事件处理
- Android基于回调的事件处理
- Android事件处理模型一(基于回调机制的事件处理)
- Android 之事件处理(一)基于回调机制的事件处理
- Event---Android事件处理模型一(基于回调机制的事件处理)
- Android 事件处理详解(二) —— 基于回调的事件处理
- 【Android】基于监听的事件处理和基于回调的事件处理
- Android基于回调的事件处理与基于监听的事件处理
- Android中基于回调的事件处理
- Android -----基于回调机制的事件处理
- android学习11#--基于回调的事件处理
- android基于回调的事件处理机制
- 第一课:android的事件处理(基于监听)
- Android事件处理之二 基于回调的事件处理
- Android事件处理方法总结-基于回调的事件处理
- hdoj1262 寻找素数对
- 建联合主键报错DB2 Database Error: ERROR [42997] [IBM][DB2/AIX64] SQL0270N Function not supported (Reason c
- Vuforia Unity Camera Image Access
- 从模板生成代码
- 定时器
- 第二课:Android的事件处理(基于回调)
- IO-FileReader、FileWriter类
- mysql优化之sql语句优化
- Qt QMap
- 关于http 缓存处理的步奏
- Linux内核中的双链表
- Extjs组件重绘
- HDU 2149 Public Sale【取石子类简单博弈】
- eclipse通过插件连接虚拟机里的hadoop集群