キーイベントの取得
今回は、キーイベントを取得して処理するというのを
実装してみます。
本当は、タッチイベントで画面をスライドさせたらっていう
処理がしたかったんですが
とりあえず、キーイベントから勉強の意味もかねて。
まず、メインですが今後タッチイベントなども勉強することを
考えて、ListViewでそれぞれ呼びやすくしておきます。
public class Practice extends Activity implements AdapterView.OnItemClickListener{ private static final String[] MENU= { "TuchSample","KeyEventSample","WebKitSample" }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, MENU); ListView listView = (ListView) findViewById(android.R.id.list); listView.setAdapter(adapter); listView.setClickable(true); listView.setFocusable(true); listView.setOnItemClickListener(this); } public void onItemClick(AdapterView<?> parent, View v, int position, long id) { switch(position) { case 0: break; case 1: Intent intent = new Intent(this,net.kronosjp.sample.android.keyevent.KeyEventAct.class); startActivityForResult(intent, RESULT_OK); break; default: break; } } }
まあ、これは説明不用ですね。
今はキーイベントが選択された部分だけ実装してます。
次に、実際のキーイベントを取得する画面です。
画像はicon.pngですw
今回は、構成として上記画面表示および、イベント取得として、
Viewを継承したKeyEventViewクラスを作成します。
さらに、KeyEventViewには、View.OnKeyListenerをimplementsしておきます。
とりあえず、Toastを表示して確認するまでの実装です。
public class KeyEventView extends View implements View.OnKeyListener{ private int w; private int h; private int x; private int y; private Bitmap bm; private final Paint paint = new Paint(); public KeyEventView(Context context) { super(context); setFocusable(true); setOnKeyListener(this); Drawable drw = context.getResources().getDrawable(R.drawable.icon); w = drw.getIntrinsicWidth(); h = drw.getIntrinsicHeight(); bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); Canvas cv = new Canvas(bm); drw.setBounds(0, 0, w, h); drw.draw(cv); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { w = w/2; h = h/2; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(color.background_dark); canvas.drawBitmap(bm, x, y,paint); } public boolean onKey(View v, int keyCode, KeyEvent event) { int action = event.getAction(); switch(action) { case KeyEvent.ACTION_UP: Toast.makeText(getContext(), "ActionUp", Toast.LENGTH_SHORT).show(); break; case KeyEvent.ACTION_DOWN: Toast.makeText(getContext(), "ActionDown", Toast.LENGTH_SHORT).show(); break; case KeyEvent.ACTION_MULTIPLE: Toast.makeText(getContext(), "ActionMultiple", Toast.LENGTH_SHORT).show(); break; default: break; } return false; } }
さて説明ですが、コンストラクタでicon.pngの描画してます。
このクラスでのポイントは、onKeyメソッドを使ってることです。
Viewを継承した段階で、onKeyUpメソッドやonKeyDownメソッドをオーバーライドして使えます。
しかし、処理をまとめる意味でonKeyメソッドを使用してみました。
KeyEventクラスにはキーイベント処理判別定数があるんで問題なしでした。
まあ、これでとりあえずは動いたんですが
判別って、上下しかないわけ?
右とか左とか押したら、下判別されたり上判別されたりと色々なわけです(汗
画像を右へ移動とかいう場合はどうするんだろ・・・
もう少し凝った実装して、色々弄ってみるか。
あっ、でも明日はタッチイベントの実装にしよう。