欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虚拟按键 振动效果

程序员文章站 2024-01-17 16:55:52
...
[DESCRIPTION]
Setting->情景模式->使能振动选项,TP虚拟按键无振动效果

[SOLUTION]
       修改tp driver中对于虚拟按键在normal mode下的上报方式为坐标上报,如果直接在TP driver中去上报key, android framework不会走振动的流程,此时如果想要实现虚拟按键振动,可以修改PhoneWindowManager.java  中 interceptKeyBeforeQueueing方法里添加 if (down && ((keyCode == KeyEvent.KEYCODE_HOME)||(keyCode == KeyEvent.KEYCODE_MENU)||(keyCode == KeyEvent.KEYCODE_BACK))){
            performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
        } 处理。

       对于虚拟按键,只要以坐标形式上报并且在tpd_custom_xxx.h中配置好虚拟按键的坐标范围,Android framework会自动进行振动处理。


       在TouchPanel的driver中,如果虚拟按键是以 input_report_key(tpd->kpd, key_code, key_val);方式上报key值,是不会有触感的。
       如果虚拟按键是以坐标形式上报,如下所示:
               input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
               input_report_abs(tpd->dev, ABS_MT_POSITION_Y, y);
       上报的,就会有触感。


     
把虚拟按键以坐标的形式上报。
1,TPD_HAVE_BUTTON宏要打开:#define TPD_HAVE_BUTTON

2,定义按键的坐标位置(具体定义,可以参考 FAQ03862 --电容屏客制化文件vitual key的配置)
#define TPD_BUTTON_HEIGH   100
#define TPD_KEY_COUNT           3
#define TPD_KEYS                { KEY_MENU, KEY_HOME,KEY_BACK}
#define TPD_KEYS_DIM            {{80,850,160,TPD_BUTTON_HEIGH},{240,850,160,TPD_BUTTON_HEIGH},{400,850,160,TPD_BUTTON_HEIGH}}

3, 从TouchPanel中读到的虚拟按键数据有两种,一种是key值(1,2,3),另一种是报的坐标值((x,y));
如果读出的虚拟按键值为坐标,那直接按TouchPanel报坐标点的方式上报就OK了。
如果是key值,那就需要把key人为的转为坐标,然后在上报。