虚拟按键 振动效果

[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人为的转为坐标,然后在上报。

你可能感兴趣的:(android,振动,TP,虚拟按键)