ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:27.36KB ,
资源ID:2987422      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2987422.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(android系统触摸屏虚拟按键.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

android系统触摸屏虚拟按键.docx

1、android系统触摸屏虚拟按键 虚拟按键(VirtualKey)是Eclair版本开始增加的新特性。VirtualKey的功能是利用触摸屏,模拟按键发生的事件,这样就可以利用触摸屏的边缘,实现一些可以自定义的按键效果。在Android系统中,触摸屏设备发送的是RawInputEvent(原始输入事件),而按键发送的是KeyEvent(按键事件)。KeyEvent直接发送给应用程序层,RawInputEvent在Android的Java框架中被转换成MotionEvent发送给应用程序层。在Android系统中虚拟按键的实现方法是:在某种情况下,将RawInputEvent转换成KeyEven

2、t。frameworks/base/services/Java/com/android/server目录中的InputDevice.Java文件负责处理虚拟按键的主要文件。虚拟按键的处理相对简单,需要根据以下文件对虚拟按键的内容进行配置:/sys/board_properties/virtualkeys.devicename在InputDevice.Java文件中通过readVirtualKeys,对进行消息的转化。根据配置文件将RawInputEvent转换成按键相关的内容。virtualkeys.devicename是虚拟按键的适配文件,需要在目标文件系统的/sys/board_prope

3、rties/目录中。虚拟按键配置文件的格式如下所示:0x1:扫描码:X:Y:W:H:0x1:例如,在MSM的mahimahi平台上查看虚拟按键的配置文件如下所示:#cat/sys/board_properties/virtualkeys.synaptics-rmi-touchscreen0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55由此可见,其中定义了4个区域的虚拟按键,它们的Y坐标相同,可见4个按键的矩形区域位于水平的一排。其转换的扫描码分别为158,13

4、9,102,217,分别对应于BACK(返回),MENU(菜单),HOME(主界面),SEARCH(搜索)这4个按键。另外一个系统的虚拟按键的配置文件如下所示:$cat/sys/board_properties/virtualkeys.qtouch-touchscreen0x01:139:90:936:116:104:0x01:102:252:936:116:104:0x01:158:402:936:116:104其转换的扫描码分别为:139,102,158,分别对应于MENU(菜单),HOME(主界面),BACK(返回)这3个按键。提示:使用虚拟按键转换成为的是按键的扫描码,不是按键码,因此

5、依然需要经过按键布局文件的转化才能得到按键码。(二)如果按照韩超和梁泉的Android系统级深入开发移植与调试的第八章描述虚拟按键的实现过程如下:1.硬件分析我所使用的触摸屏分辨率是1158*768,可视区域大小是1024*768(这也是LCD屏的大小),在触摸屏两侧总有5个按键。2.触摸屏按键驱动的修改既然可视区域在触摸屏中间部位,因此需要在触摸屏驱动中修改input_set_abs_params()函数中的参数1. input_set_abs_params(input_dev,ABS_MT_POSITION_X,61,1085,0,0);2. input_set_abs_params(in

6、put_dev,ABS_MT_POSITION_Y,0,SCREEN_MAX_Y,0,0);其中61是可视区域左侧x轴左边坐标,1085是右侧的。3.Android框架层Android上层通过读取触摸屏坐标并经过转算后来识别定义好的虚拟按键,代码位于frameworks/base/services/java/com/android/server/KeyInputQueue.java中:static class Virtualkey是负责按键定位的方法;private void readVirtualKeys(String deviceName)负责读取sys文件,这是最重要的代码,也是与底层s

7、ys文件系统沟通的桥梁,它会读取/sys/board_properties/virtualkeys.deviceName文件,deviceName一定要与触摸屏设备名称一致,不然会找不到指定的sys文件。4.sys文件系统前面讲到了readVirtualKeys会读取sys文件,这个sys文件就是定义虚拟按键的坐标以及键值,它的协议格式是一段字符串,每个按键有六项分别用冒号分割,按键按键之间也是用冒号分割,标准格式是:键类型:键值:按键区域中心x坐标:按键区域中心y坐标:按键区域宽:按键区域高加载触摸屏以及创建sys文件的代码:cppview plaincopy1. #ifdefVIRTUAL

8、_KEYS2. 3. staticssize_tvirtual_keys_show(structkobject*kobj,4. 5. structkobj_attribute*attr,char*buf)6. 7. 8. 9. if(1)10. 11. 12. 13. returnsprintf(buf,14. 15. _stringify(EV_KEY):_stringify(KEY_VOLUMEUP):1030:370:30:3016. 17. :_stringify(EV_KEY):_stringify(KEY_VOLUMEDOWN):1030:470:30:3018. 19. :_st

9、ringify(EV_KEY):_stringify(KEY_BACK):1030:18:30:3020. 21. :_stringify(EV_KEY):_stringify(KEY_HOME):1030:136:30:3022. 23. :_stringify(EV_KEY):_stringify(KEY_MENU):1030:236:30:3024. 25. n);26. 27. else28. 29. 30. 31. 32. 33. 34. 35. 36. 37. staticstructkobj_attributevirtual_keys_attr=38. 39. .attr=40.

10、 41. .name=virtualkeys.xxxx,42. 43. .mode=S_IRUGO,44. 45. ,46. 47. .show=&virtual_keys_show,48. 49. ;50. 51. 52. 53. staticstructattribute*properties_attrs=54. 55. &virtual_keys_attr.attr,56. 57. NULL58. 59. ;60. 61. 62. 63. staticstructattribute_groupproperties_attr_group=64. 65. .attrs=properties_

11、attrs,66. 67. ;68. 69. 70. 71. staticvoidvirtual_keys_init(void)72. 73. 74. 75. intret;76. 77. structkobject*properties_kobj;78. 79. 80. 81. properties_kobj=kobject_create_and_add(board_properties,NULL);82. 83. if(properties_kobj)84. 85. ret=sysfs_create_group(properties_kobj,86. 87. &properties_att

12、r_group);88. 89. if(!properties_kobj|ret)90. 91. pr_err(failedtocreateboard_propertiesn);92. 93. 94. #endif95. 其中.name = virtualkeys.xxxx的xxxx就是触摸屏设备名称,也就是前面说到的deviceName,virtual_keys_init()函数可以在触摸屏probe函数中调用。另外,我将可视区域左侧的两侧按键移到了右侧实现,因此五个按键区域中心x坐标都是一样,这部分要在触摸屏驱动增加x轴坐标调整,这部分我就不再说明。以上步骤完成后可以使用 cat /sys

13、/board_properties/virtualkeys.deviceName查看虚拟按键的配置文件,并试试按下触摸屏上按键是否有反应,如果坐标不正确还要进行耐心地校准。具体的可以去HTC网站((三)但是我用的是四线电阻触摸屏,用上面的方式好像没有任何反应,所以我采用最直接的方式用input_event发送按键消息,就是在触摸屏处理芯片TSC2007驱动中当读到一定范围内的触摸事件就发送按键消息:这种方式只要修改TSC2007驱动的几个地方:1.定义全局局部变量用于记录是否有虚拟按键按下cppview plaincopy1. staticintbackkeydown=0;2. staticinthomekeydown=0;3. staticintmenukeydown=0;2.在prope函数中添加cppview

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1