2011年3月6日日曜日

Androidその14 ~キーイベントの処理~

どうも、69です。

今日はキーイベントの処理です。

キーを押したときにキーコードが表示されます。
用意するものは

keyex.java
keyview.java

です。

では早速↓

*****KeyEX.java************************************

package info.webry.at.androidid.keyex;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;

//キーイベント処理のKeyExクラスの定義
public class KeyEx extends Activity {
    /** Called when the activity is first created. */
//キービューと定期処理ハンドラのフィールド変数定義
private KeyView keyView;
private TickHandler tickHandler;

//アプリの初期化
    @Override
    public void onCreate(Bundle android) {
        super.onCreate(android);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        keyView=new KeyView(this);
        setContentView(keyView);
    }
  
    //アプリの再開
    @Override
    public void onResume(){
     super.onResume();
    
     //定期処理ハンドラの開始
     tickHandler=new TickHandler();
     tickHandler.sleep(0);
    }
  
    //アプリの一時停止
    @Override
    public void onPause(){
     super.onPause();
    
     //定期処理ハンドラの停止
     tickHandler=null;
    }
  
    //定期処理ハンドラ
    public class TickHandler extends Handler{
     //定期処理
     @Override
     public void handleMessage(Message msg){
     keyView.invalidate();
     if(tickHandler != null)tickHandler.sleep(100);
     }
    
     //スリープ
     public void sleep(long delayMills){
     removeMessages(0);
     sendMessageDelayed(obtainMessage(0),delayMills);
     }
    }
}
**************************************************


*****keyview.java************************************

package info.webry.at.androidid.keyex;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.KeyEvent;
import android.view.View;

//キーイベント処理のKeyViewクラスの定義
public class KeyView extends View{
private int keyCode=-999;

//コンストラクタ
public KeyView(Context context){
super(context);
setBackgroundColor(Color.WHITE);

//フォーカス指定
setFocusable(true);
setFocusableInTouchMode(true);
}

//コードの描画
@Override
protected void onDraw(Canvas canvas){
//文字サイズなどの設定
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setTextSize(32);

//キーコードの描画
String str="";
if(keyCode==KeyEvent.KEYCODE_DPAD_UP) str="DPAD_UP";
if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) str="DPAD_DOWN";
if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT) str="DPAD_LEFT";
if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT) str="DPAD_RIGHT";
canvas.drawText("KeyCode>"+keyCode+" "+str, 0, 40, paint);
}

//キーダウンイベントの処理
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
this.keyCode=keyCode;
return super.onKeyDown(keyCode,event);
}

//キーアップイベントの処理
@Override
public boolean onKeyUp(int keyCode,KeyEvent event){
this.keyCode=-1;
return super.onKeyUp(keyCode,event);
}

}

**************************************************


詳細はまた次回。

おしまい。

0 件のコメント:

コメントを投稿