忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/25 00:23 |
Android2.2 クリックリスナーでキャンセル扱いにする
うっかり間違ったボタンを押した場合、指を範囲外にドラッグしてから離すと、HTMLのフォームのようにキャンセルした扱いにするアプリは数多くあります。
どうやって実装しているのでしょう。

前回OnTouchListenerを実装しました。
ACTION_UPとACTION_CANCELがあるので、「画像上で指を離したときがACTION_UPで、画像の範囲外に指をドラッグして離したときがACTION_CANCELなの?」と思ってみれば違います。
ACTION_CANCELは「押してるときに戻るボタンを押した」とかの本気でキャンセルされた場合にしか呼ばれず、それ以外は大抵ACTION_UPになります。
ですのでACTION_UPに進むボタンを実装してしまうと、うっかり間違って押した場合にキャンセルができなくなってしまいます。

解決策としては、OnTouchListenerとOnClickListenerを併用。
view.setOnTouchListener(new OnTouchListener(){
	public boolean onTouch(View view, MotionEvent motionevent) {
		switch(motionevent.getAction()){
			//押した
			case MotionEvent.ACTION_DOWN:
				Log.v("OnTouchListener", "ACTION_DOWN");
				break;
			//離した
			case MotionEvent.ACTION_UP:
				Log.v("OnTouchListener", "ACTION_UP");
				break;
			//キャンセルした
			case MotionEvent.ACTION_CANCEL:
				Log.v("OnTouchListener", "ACTION_CANCEL");
				break;
		}
		return false;
	}
});
view.setOnClickListener(new OnClickListener(){
	@Override
	public void onClick(View view) {
		Log.v("OnClickListener: ", "onClick");
	}
});
OnClickListenerは、名前に反して指を離したときに発動します。
また、範囲外に指を移動してから離した場合は反応しません。
よって画面遷移などの契機とするのに最適なリスナーとなっています。

なお、今度はonTouchの返り値がfalseになっていることに注意です。
こうしないとOnClickListenerに処理が渡りません。
そしてOnClickListenerを実装するとreturn falseでもACTION_UPやACTION_CANCELが反応するようになります。
意味がわからん。


実際他のアプリがどうやって実装してるのかは知らないのですが、これが一番簡単な作り方なのですかね。
PR


2011/11/04 21:45 | Comments(0) | TrackBack() | Android

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft 1.8.1 AMCO1.8.1Rev5Bの紹介その3 Treecapitator、Floating Ruins、Score、Death Chest | HOME | Minecraft 1.8.1 AMCO1.8.1Rev5Bの紹介その2 Recipe Book、Starting Inventory>>
忍者ブログ[PR]