GestureDetector.SimpleOnGestureListener を使ってタップイベントを処理している。
シングルタップ、ダブルタップ、スクロール、フリング、そしてロングプレス。
テストで普通やらないだろうという速度で全てのイベントを発生させる。
フリングで画像切り替え中にロングプレスが反応する。
なので、
@Override
public void onLongPress(MotionEvent event) {
// 省略
if ( event.getDownTime() < 1000 ) {
return;
}
// 省略
}
押されていた時間が1秒未満だったらスルーさせた。
相変わらず過度なフリングでロングプレス誤動作が起こる。
都合の良いメソッドはないのか調べたら
event.setAction()
キャンセルとかもセットできるのかな?
event.setAction(MotionEvent.ACTION_CANCEL);
なんでもやってみる。
@Override
public void onLongPress(MotionEvent event) {
// 省略
if ( event.getDownTime() < 1000 ) {
event.setAction(MotionEvent.ACTION_CANCEL);
return;
}
// 省略
}
ロングプレス誤動作は出なくなった。今のところ…。
onLongPress()は return ture; じゃないからイベント消費も無いのかな。
MotionEvent.ACTION_CANCEL で一旦リセットされた?
まぁ、色々都合があるのだろう。
しがらみを断ち切る event.setAction(MotionEvent.ACTION_CANCEL);覚えておこう。
検索かけてもこの使い方は出てこない。
良いのか悪いのか分からん。