1.系统分析:Android系统本身支持实体按键,android.view.KeyEvent的中有 KEYCODE_DPAD_DOWN KEYCODE_DPAD_LEFT KEYCODE_DPAD_RIGHT KEYCODE_DPAD_UP 四个方向键和KEYCODE_DPAD_CENTER 一个确定键,和KEYCODE_BACK一个后退键。
2.应用按键分析:对于一个应用来说只需要4个方向键,1个确定键,1个后退键,就足够操作了,问了用户交互好,可能还用到“菜单”键,也就是说,整一个手柄上,我们只需要把需要相应的按键的键值转换成这7个按键的键值就可以了。
3.手柄按键分析:对手柄来说,不同的手柄都可以有不同数量的按键,通过他们的SDK或者开发包,我们可以拿到相应的键值,对于手柄,肯定会有A B X Y 四个键和至少一个“方向盘”(不论这个方向盘是方向按键类型还是摇杆类型),所以,开发中只需要把“方向盘”的按钮相应事件转发称Android的DPad按键就可以了。一般把A键作为确定键,把B键作为后退键。
4.摇杆数据分析:
对于手柄(Moga Pro)的摇杆而言,它所发送的按钮执行是可以去到的四个值,分别是 X Y Z RX ,X、Y两个值是左边摇杆的移动属性,Z、RX则是右边摇杆的移动属性,属性是个模拟量,从-1到1之间。手柄移动到一个方向再回来时还会再次触发一次位置在(0,0)的监听。手柄一直在一个方向上不动,不会连续触发位移监听。
手柄的摇杆的数轴Y轴是反方向的。分析如下图:
因为手柄的摇杆是个模拟量,是从-1到1之间的float类型,任何移动都会触发摇杆移动事件,所以把整个数轴划分成如上图的四个区域。这个可以实现即使用户向右上方一定角度移动摇杆,也能相应成方向键。
================================================
对于连续发键的问题下次再整理