ここにきて、タッチという、超基礎の部分で不具合が発生した。
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 件のコメント:
コメントを投稿