Feeds:
文章
留言

Archive for 十一月 5th, 2008

Android 移動按鍵處理

修改前一個彈跳球範例,改成用方向鍵控制球的移動,測試用 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;
    }
};

Read Full Post »

研究一陣子 SDK 內附的 Snake 範例程式,改寫成一個簡單的彈跳球程式來驗證自己是否真的了解 Snake 的運作

其中比較有趣的是

    class RefreshHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
            TileView.this.update();
            TileView.this.invalidate();
        }

        public void sleep(long delayMillis) {
         this.removeMessages(0);
            sendMessageDelayed(obtainMessage(0), delayMillis);
        }
    };

透過指定延遲時間重覆送出 Message 觸發重繪事件來達到動畫效果。以下是執行效果。

改寫後 apk 可在這裡下載。

安裝
adb install ball.apx

移除
adb uninstall com.example.android.snake

image

Read Full Post »