2017年1月6日金曜日

Androidでタッチイベントが取得できないだと!

ごく一般的なつくり方で、いくか自分用のアプリも作ってきたのだが、
ここにきて、タッチという、超基礎の部分で不具合が発生した。

Activityの onTouchEvent() が反応しないのだ。

最初のタッチのみ反応して、2回目以降反応しない

これは良くある問題で、検索すればいくらでも対処方法はでてくる。
onTouchEvent() の最後で、

 return true

と、trueを返すようにするだけだ。

だが今発生している問題は、

初回のタップのみ反応せず、2回目以降は反応する』だ。

意味が分からない。

onTouchEvent() の内部に、ブレークポイントを仕掛けておくと、
最初のタッチでは無反応なのに、2回目以降は、しっかりブレークしてくる。

たしか、去年アプリを作った時は、こんな問題は発生していなかったはず。
こんな大きな問題を見落とすはずがない。

とすると、最近大改造して、surfaceView ⇒ GLSurfaceView にしたのが一番怪しい

MotionEvent ev = MotionEvent.obtain(10, 20, MotionEvent.ACTION_DOWN, x, y, 0);
this.onTouchEvent(ev);

↑これを使うと、疑似的にプログラムから、タッチイベントを呼べるらしい。
onCreate() の最後に付け加えると、確かに onTouchEvent が呼ばれている。

が、その後、タッチすると無反応で、2回目から反応する。

どういうことなのだろうか?

一番考えられるのは、初回、別のどこかにフォーカスが当たっていて、
初回タップで GLSurfaceViewにフォーカスが移り、反応するようになった、だろう。

念のため、起動時に、

view.bringToFront();

で、一番手前に持ってきているはずなのだが…。


0 件のコメント:

コメントを投稿