首先拿到手柄后需要在系统的蓝牙设置中配对,必须配对成功后才能进行后续的开发任务。这里以北通手游G1手柄和小米9手机为例:
IMG_20191120_100910.jpg
上图就是BETOP W1 BFM就是要配对的手柄名称,在名称下面显示的“已连接”表示手柄和手机连接成功,如果没有这个提示就需要点击手柄名称来连接。
为了验证手柄是否连接成功最好的办法是装手柄厂商配套的app应用,这里装的是“左游游戏厅”。通过这个app的检验功能可以明确的知道我们的手柄是否和手机连接正常。
Screenshot_2019-11-20-10-30-03-296_com.zuoyou.cen.jpg
连接成功后就可以开始我们的开发任何了,手柄和触屏一样都是通过控件的回调事件来获取手柄上的按键信息,但在此之前请注意一定要给你的控件设置焦点,不然会没法响应回调事件;
android:focusable="true"
android:focusableInTouchMode="true"
android:focusedByDefault="true"
然后在代码中设置按键和摇杆的监听事件:
// 摇杆响应事件
viewTouch.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@Override
public boolean onGenericMotion(View v, MotionEvent event) {
return false;// 是否把事件传给子控件
}
});
// 按键响应事件
viewTouch.setOnKeyListener(new View.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
return false;
}
});
如果熟悉触屏的Touch机制的应该很容易明白上述的代码,onGenericMotion和onKey方法都有一个返回值,其作用和onTouch方法的返回值作用,为true说明你已经成功执行按键方法了,事件就结束不会以再传递给其它控件了。
setOnGenericMotionListener监听所有与MotionEvent.AXIS常量相关的事件,setOnKeyListener监听所有与按键相关的事件。
现在我们来说一下摇杆事件;
- MotionEvent定义了一系列以AXIS开头的常量。
- L2和R2即是按键也是摇杆,所以会触发两种事件。
- 摇杆的取值范围为0-1.0之间。
- 摇杆用正负来代表拉动的方向,往右往下为正值,往左往上为负。
- 摇杆拉着不放时只会触发一次事件,不会连接触发。
- 左摇杆被拉动时会触发相应的方向按键事件,而且是连接触发按键。
- 右摇杆的动作不会触发方向键事件。
接着我们来说一下MotionEvent和KeyEvent定义的相关事件:
joy.png
- 按键按下或释放:MotionEvent.ACTION_DOWN、MotionEvent.ACTION_UP
- 左摇杆:MotionEvent.AXIS_X、MotionEvent.AXIS_Y
- 右摇杆:MotionEvent.AXIS_Z、MotionEvent.AXIS_RZ
- 方向键:KeyEvent.KEYCODE_DPAD_DOWN、KeyEvent.KEYCODE_DPAD_UP、KeyEvent.KEYCODE_DPAD_LEFT、KeyEvent.KEYCODE_DPAD_RIGHT、MotionEvent.AXIS_HAT_X、MotionEvent.AXIS_HAT_Y
- A\B\X\Y:KeyEvent.KEYCODE_BUTTON_A、KeyEvent.KEYCODE_BUTTON_B、KeyEvent.KEYCODE_BUTTON_X、KeyEvent.KEYCODE_BUTTON_Y
- L1\R1\L2\R2:KeyEvent.KEYCODE_BUTTON_L1、KeyEvent.KEYCODE_BUTTON_R1、KeyEvent.KEYCODE_BUTTON_L2、KeyEvent.KEYCODE_BUTTON_R2
- select\start:KeyEvent.KEYCODE_BUTTON_SELECT、KeyEvent.KEYCODE_BUTTON_START、
官方API文档:https://developer.android.com/training/game-controllers/controller-input.html#dpad
点击链接加入群聊【口袋里的安卓】:https://jq.qq.com/?_wv=1027&k=5z4fzdT
或关注微信公众号:
网友评论