どうも、69です。
前回 キーイベントの処理 の解説です。
では↓
*****KeyEX.java************************************
public class KeyEx extends Activity {
private KeyView keyView;→キービューのフィールド変数定義
private TickHandler tickHandler;→定期処理ハンドラのフィールド変数定義
//アプリの初期化
@Override
public void onCreate(Bundle android) {
super.onCreate(android);
requestWindowFeature(Window.FEATURE_NO_TITLE);
keyView=new KeyView(this);→KeyViewクラスのコンストラクタ生成
setContentView(keyView);
}
//アプリの再開
@Override
//定期処理ハンドラの開始メソッドonResume()メソッドの定義
public void onResume(){
super.onResume();
//定期処理ハンドラの開始
tickHandler=new TickHandler();→TickHandlerクラスのコンストラクタ生成
tickHandler.sleep(0);→sleep()メソッド。引数:0
}
//アプリの一時停止
@Override
//onPause()メソッドの定義
public void onPause(){
super.onPause();
//定期処理ハンドラの停止
tickHandler=null;→tickHandlerを空にする
}
//定期処理ハンドラTickHandler()メソッドの定義
public class TickHandler extends Handler{
//定期処理
@Override
//handlerMessage()メソッドの定義
public void handleMessage(Message msg){
keyView.invalidate();→KeyViewオブジェクトのinvalidate()メソッドの呼び出し
if(tickHandler != null)tickHandler.sleep(100);→「 tickHandlerがnull 」なら「 tickHandlerオブジェクトのsleep()メソッドの引数:100を呼び出す 」
}
//スリープ処理のsleep()メソッドの定義
public void sleep(long delayMills){
removeMessages(0);→メッセージの削除。引数:メッセージID
sendMessageDelayed(obtainMessage(0),delayMills);→指定ミリ秒後にメッセージの送信
}
}
}
**************************************************
*****keyview.java************************************
//キーイベント処理のKeyViewクラスの定義
public class KeyView extends View{
private int keyCode=-999;→keyCode変数に「-999」 を代入(初期値)
//フォーカス指定→キーイベントが通知されるのはフォーカスを持っているビューのみ
setFocusable(true);→フォーカスの有効化
setFocusableInTouchMode(true);→タッチモード時のフォーカスの有効化
}
//キーコードの描画
String str="";→str変数を定義
if(keyCode==KeyEvent.KEYCODE_DPAD_UP) str="DPAD_UP";
↑「 keyCodeがKeyEvent.KEYCODE_DPAD_UP 」なら「 変数strに"DPAD_UP"を代入 」
if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) str="DPAD_DOWN";
↑「 keyCodeがKeyEvent.KEYCODE_DPAD_DOWN 」なら「 変数strに"DPAD_DOWN"を代入 」
if(keyCode==KeyEvent.KEYCODE_DPAD_LEFT) str="DPAD_LEFT";
↑「 keyCodeがKeyEvent.KEYCODE_DPAD_LEFT 」なら「 変数strに"DPAD_LEFT"を代入 」
if(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT) str="DPAD_RIGHT";
↑「 keyCodeがKeyEvent.KEYCODE_DPAD_RIGHT 」なら「 変数strに"DPAD_RIGHT"を代入 」
canvas.drawText("KeyCode>"+keyCode+" "+str, 0, 40, paint);→変数strの表示
}
//キーダウンイベントの処理
@Override
//onKeyDown()メソッドの定義
public boolean onKeyDown(int keyCode,KeyEvent event){
this.keyCode=keyCode;
return super.onKeyDown(keyCode,event);
}
//キーアップイベントの処理
@Override
//onKeyUp()メソッドの定義
public boolean onKeyUp(int keyCode,KeyEvent event){
this.keyCode=-1;
return super.onKeyUp(keyCode,event);
}
}
**************************************************
*****主に利用したクラス*******************************
import android.os.Handler;
void removeMeessage(int ID)→メッセージの削除。引数:メッセージID
boolean sendMessageDelayed(Message msg,long delayMillis)→メッセージの送信。引数:メッセージ,送信するまでの時間(ミリ秒)
Message obtainMessage(int ID)→メッセージの取得。引数:メッセージID
void handleMessage(Message msg)→メッセージの受信。引数:メッセージ
import android.os.Message;→obtainMessage()の型
import android.view.KeyEvent;→キーコードID
import android.view.View;
void invalidate()→ビューの再描画
void setFocusable(boolean focasable)→フォーカスの指定。引数:有効(true)無効(false)
void setFocusableInTouchMode(boolean focasable)→タッチモード時のフォーカス指定。引数:有効(true)無効(false)
boolean onKeyDown(int keyCode,KeyEvent event)→キーダウンイベントの発生時に呼ばれる。引数:キーコード,キーイベント
boolean onKeyUp(int KeyCode,KeyEvent event)→キーアップイベント時に呼ばれる。引数:キーコード,キーイベント
**************************************************
onResume()メソッドで定期処理ハンドラの開始
onPause()メソッドで定期処理ハンドラの停止を行っています。
Androidでは任意の時間に何か処理を行いたいとき→Handlerクラスを使用
キーコードはKeyEventクラスの「KEYCODE_」から始まる定数で定義されています。
if文「 if(~){…} 」は「もし~なら…」ということです。
詳しくは、また今度。
おしまい。
0 件のコメント:
コメントを投稿