記事一覧

Catching MotionEvent.ACTION_MOVE / UP

In my current Android app I have several customized views that inherit View Class.
Each of them overrides onTouchEvent and tracks touch movements.
But one of them cannot catch MotionEvent.ACTION_MOVE and UP, while others can.

I did about one hour of try & errors to find that, if you return false for onTouchEvent's return value when you caught MotionEvent.ACTION_DOWN, tracking of touch event finishes and is no longer performed until your next touch.
I modified my code to return true when needed and it worked.

It may mean "You returned false? OK, this touch is something you don't need to care about, right? You'll never get troubled even if I stop giving further information about it."
It's understandable but...

今手がけているAndroidアプリでは、Viewクラスをカスタマイズしたクラスをいくつか使っているのだけど、そのうちのひとつのクラスだけがタッチイベントの MotionEvent.ACTION_MOVE と UP を取れない、という現象に遭遇。
他はちゃんと取れてるのになんでや?と思って悩むこと1時間あまり、やっと発見したのが、最初に MotionEvent.ACTION_DOWN を受け取ったとき、onTouchEventの戻り値に false を返してしまうと、タッチの動作をそれ以上追いかけるのをやめてしまうようなのだ。
しかるべき時にちゃんと trueを返すようにしたらうまくいきました。

これってつまり「false返したってことはこのタッチは要らないんだよね?じゃあそれ以降情報渡すのやめるから!」ってことなんでしょうね。わからんでもないが・・・。