修改前一個彈跳球範例,改成用方向鍵控制球的移動,測試用 apk 下載。
安裝
adb install move_ball.apx
移除
adb uninstall com.example.android.snake
執行效果和彈跳球一樣,我就不擷圖了。這個程式主要是測試按鍵處理,透過 Overide View.onKeyDown 事件來達成。
onKeyDown 的第一個參數 keyCode 表示按鍵代碼,只要比對特定鍵值來進行對應處理即可。
這個程式只用了方向鍵,方向鍵的值預先定義如下:
上 KeyEvent.KEYCODE_DPAD_UP
下 KeyEvent.KEYCODE_DPAD_DOWN
左 KeyEvent.KEYCODE_DPAD_LEFT
右 KeyEvent.KEYCODE_DPAD_RIGHT
程式片段如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_UP){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
}else{
return super.onKeyDown(keyCode, event);
}
return true;
}
要攔截這個訊息有一個特別需要注意的地方是 View 要取得 Focus 才會觸發 onKeyDown 事件。
補充:也可以使用 View.setOnKeyListener 進行處理,如下:
findViewById(R.id.snake).setOnKeyListener(mKeyListener);
// … 略
OnKeyListener mKeyListener = new OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event){
TileView tv = (TileView) v;
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_UP){
}else if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
}else{
return false;
}
return true;
}
};