////
TOP目次
2012年06月13日

キーを無効にする


イベントからは少し外れますが特定のキーを無効にする方法もあります
無効にしたいキーのイベントが発生したときに
dispatchKeyEventメソッドにおいてtrueを返せば無効にすることができます
dispatchKeyEventは
キーを押したとき・押し続けたとき・キーを離したときに呼び出されます
つまり呼び出されたときにif文で特定のイベント時と
特定のキーが押されたときだけtureを出力すれば無効にすることができます

今回はサンプルプログラムとしてbackキーを無効にしたいと思います
実際にはあまり使うこともありませんが
誤動作で終了させるのを防ぐための処置等に使う・・・かもしれませんw
MainActivity.java
package blog.test;
 

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
	public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
}
	
	// dispatchKeyEventを設定
	@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		//ボタンが押された時を指定
		if(event.getAction() == KeyEvent.ACTION_DOWN) {
			// BACKキーを指定
			if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {// BACKキー
		return true;
			}
		}
		return super.dispatchKeyEvent(event);
	}
}

これで実行するとbackキーが無効になったためアプリが終了できなくなりましたww Homeキー等で戻ってくださいねw

なおbackキーは他のキーと異なり
キーUP時にdispatchKeyEventメソッドがコールされないようです
またHOMEキーは押してもdispatchKeyEventメソッドがコールされないので
無効化できません
無敵ww
スポンサードリンク

posted by kenken at 15:30 | Comment(0) | TrackBack(0) | イベント イベント処理 | このブログの読者になる | 更新情報をチェックする
2012年06月12日

タッチイベントを取得する


前回はActivityのonTouchEventとonKeyDownを取得しました
実はonTouchEventはタッチパネルを操作時に
ACTION_DOWNACTION_MOVE(繰返し)→ACTION_UPの順に発生しています
今回はこれらをonTouchEventメソッドをオーバーライドして取得してみます
これは以前手書き入力のときにViewクラスで使用したものをActivityクラスに変換したものです
手書き入力を行う(1)
今回も前回と同様にMotionEventのgetX・getYでタッチされたx, y座標を取得しています
それに加えACTION_DOWN・ACTION_MOVE・ACTION_UPをそれぞれログで出力するものにしました
ちなみにlayout/main.xmlには何も配置していません
MainActivity.java
package blog.test;
 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;

public class MainActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
	//イベントの起きた座標を取得
	float x = event.getX();
	float y = event.getY();
	String action = "";
	
	switch(event.getAction() & MotionEvent.ACTION_MASK) {
	case MotionEvent.ACTION_DOWN:
		action = "Touch Down";
		break;
	case MotionEvent.ACTION_MOVE:
		action = "Touch Move";
		break;
	case MotionEvent.ACTION_UP:
		action = "Touch Up";
		break;
	case MotionEvent.ACTION_CANCEL:
		action = "Touch Cancel";
		break;
	}
	//イベント座標のログ出力
	Log.i("tag", action + " x=" + x + ", y=" + y);
	return super.onTouchEvent(event);
	}
}
MotionEventが何が起こったか場合分けしてactionに文字を入力しています
最後に入力された文字とイベント座標を同時に出力しています

これを実行すると真っ黒な画面が出てきますが
いろんなところをタッチすると次々にログが出力されていきます
device127.png
スポンサードリンク

posted by kenken at 17:03 | Comment(0) | TrackBack(0) | イベント イベント処理 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。