XMLにandroid:onClickと書くと簡単にView.OnClickListenerを実装できるという話をしました。
さて、イベントリスナーにはOnClickListener以外にも長押しを感知するOnLongClickListener、キーボードなどの押下を感知するOnKeyListenerなどがあります。
そこらへんはXMLでは指定できないみたいなので、Javaからリスナーをセットする必要があります。
とりあえずOnTouchListenerを実装してみます。
何故だ。
http://developer.android.com/reference/android/view/View.OnTouchListener.html
> Returns True if the listener has consumed the event, false otherwise.
よくわからんが、このリスナーで処理を続けるならtrueにしろってことか?
とreturn trueにしたら無事動作するようになりました。
たったこれだけのことに数時間引っかかったことは秘密だ。
で、解決したあとになってそのまんまの記事が見つかるのもよくあること。
さて、イベントリスナーにはOnClickListener以外にも長押しを感知するOnLongClickListener、キーボードなどの押下を感知するOnKeyListenerなどがあります。
そこらへんはXMLでは指定できないみたいなので、Javaからリスナーをセットする必要があります。
とりあえずOnTouchListenerを実装してみます。
ImageView view = (ImageView) findViewById(R.id.imageView);
view.setOnTouchListener(new OnTouchListener(){
@Override
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;
}
});
一見できているように見えますが、何故かACTION_DOWNは感知するのにACTION_UPもACTION_CANCELも反応しません。何故だ。
http://developer.android.com/reference/android/view/View.OnTouchListener.html
> Returns True if the listener has consumed the event, false otherwise.
よくわからんが、このリスナーで処理を続けるならtrueにしろってことか?
とreturn trueにしたら無事動作するようになりました。
たったこれだけのことに数時間引っかかったことは秘密だ。
で、解決したあとになってそのまんまの記事が見つかるのもよくあること。
PR
トラックバック
トラックバックURL: