Android事件传递和响应:TP和按键
来源:互联网 发布:淘宝主动打招呼 编辑:程序博客网 时间:2024/04/30 11:49
Android按键事件处理主要在View和Activity两个级别。和Touch事件相比,简单很多。按键事件的处理机制如下:
(1)默认情况下,如果没有View获得焦点,事件将传递给Activity处理。
(2)如果View获得焦点,事件首先传递到View的回调方法中(按键的回调用OnKeyListener,TP的回调用OnTouchListener)。view回调方法不处理的话返回false,事件继续传递到Activity处理。反之,处理了的话返回true,事件不会继续传递。
(3) 一个TP操作的实例
通过TP操作activity上一个button控件,包括按下、划动、弹起三个操作,来区分出getX()与getRawX()的区别。两者都是获取屏幕坐标,但二者又有区别:getX():是获取相对当前控件(View)的坐标;getRawX():是获取相对显示屏幕左上角的坐标。
JAVA代码如下,用的仍然是view中的interface:
public class MainActivity extends Activity implements OnTouchListener {private Button btn; private int x = 0, y = 0; private int rawX = 0, rawY = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn); btn.setOnTouchListener(this); }@Overridepublic boolean onTouch(View v, MotionEvent event) {// TODO Auto-generated method stubint eventaction = event.getAction(); switch (eventaction) { case MotionEvent.ACTION_DOWN: x = (int) event.getX(); y = (int) event.getY(); rawX = (int) event.getRawX(); rawY = (int) event.getRawY(); Log.e("homer", "ACTION_DOWN x = " + x + "; y = " + y + "; rawX = " + rawX + "; rawY = " + rawY); break;case MotionEvent.ACTION_MOVE: x = (int) event.getX(); y = (int) event.getY(); rawX = (int) event.getRawX(); rawY = (int) event.getRawY(); Log.e("homer", "ACTION_MOVE x = " + x + "; y = " + y + "; rawX = " + rawX + "; rawY = " + rawY); break; case MotionEvent.ACTION_UP: x = (int) event.getX(); y = (int) event.getY(); rawX = (int) event.getRawX(); rawY = (int) event.getRawY(); Log.e("homer", "ACTION_UP x = " + x + "; y = " + y + "; rawX = " + rawX + "; rawY = " + rawY);break; }return false;}}
操作TP的结果,就是如下LOG TRACE:
04-11 02:41:00.479: E/homer(589): ACTION_DOWN x = 15; y = 12; rawX = 107; rawY = 101
04-11 02:41:00.611: E/homer(589): ACTION_UP x = 15; y = 12; rawX = 107; rawY = 101
04-11 02:41:03.749: E/homer(589): ACTION_DOWN x = 13; y = 29; rawX = 105; rawY = 118
04-11 02:41:03.819: E/homer(589): ACTION_UP x = 13; y = 29; rawX = 105; rawY = 118
04-11 02:41:11.410: E/homer(589): ACTION_DOWN x = 44; y = 47; rawX = 136; rawY = 136
04-11 02:41:11.480: E/homer(589): ACTION_MOVE x = 51; y = 55; rawX = 143; rawY = 144
04-11 02:41:11.519: E/homer(589): ACTION_MOVE x = 72; y = 68; rawX = 164; rawY = 157
04-11 02:41:11.549: E/homer(589): ACTION_MOVE x = 112; y = 89; rawX = 204; rawY = 178
总结:getX() 是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值(注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕); getY(),getRawY()一样的道理。
参考原文:http://orgcent.com/android-key-event-mechanism/
参考原文:http://blog.csdn.net/sunboy_2050/article/details/8757240- Android事件传递和响应:TP和按键
- android 按键事件响应和笔触事件响应
- ios事件传递和响应
- 测试按键响应的activity && getevent和setevent 用adb模拟按键和TP
- iOS事件传递和事件响应链
- android按键事件和触屏事件(1)-几个重要方法的传递顺序
- 事件传递和响应者链条
- 事件传递和响应者链
- 事件传递和响应者链条
- ios 事件传递和响应的总结
- iOS事件的传递和响应
- 事件的传递和响应(响应者链条)
- Android按键事件传递机制
- Android按键事件传递流程
- Javascript 处理 Ctrl+s 和 Tab 按键响应事件
- Qt之一个鼠标和按键响应事件演示
- Android中的按键和触屏事件
- Android事件处理和传递
- Linux必学的60个命令 (一)
- django+python+美图秀秀配置2
- 关于虚拟机默认按着Ctrl
- VC操作Excel文件编程相关内容总结
- linux中 likely与unlikely
- Android事件传递和响应:TP和按键
- 为何积极员工变懒散?
- VMWare报错:The virtual machine could not start
- android背光系统架构
- Linux 网卡如何支持TSO GSO指南
- Android 4.1 (Jelly Bean,果冻豆)
- GEP程序(C#语言描述)分析(一)
- 常用ASCII码表
- Java Http协议 断点续传