android MotionEventがDown→Move→Upの後、へんな座標でMoveが来る?(未解決)

マルチタッチをいじくりまわしていたら、
どうもSurfaceViewのonTouchEventの様子がおかしい。
各イベントでログを出してみたところ…

02-25 12:37:42.772: DEBUG/touchDown(910): X=797.0,Y=3.0
02-25 12:37:43.110: DEBUG/touchMove(910): X=798.0,Y=15.0
02-25 12:37:43.261: DEBUG/touchMove(910): X=796.0,Y=121.0
(中略)
02-25 12:37:45.850: DEBUG/touchMove(910): X=798.0,Y=476.0
02-25 12:37:45.902: DEBUG/touchMove(910): X=799.0,Y=476.0
02-25 12:37:46.121: DEBUG/touchUp(910): X=799.0,Y=476.0
02-25 12:37:46.210: DEBUG/touchMove(910): X=532.6666,Y=317.3333

ACTION_UPの後にACTION_MOVEが1回来る。


このときエミュレータWVGA、開発中のアプリは横画面限定にしてるので
WVGAの400*800→が320*532になってます。
これはちょうどdip*1に変換された格好になります。
ただの偶然かもしれないけど。


気になるので、あと2ケースも調べてみた。


HVGA(320*480なので、pixel=dipになる)

02-25 12:41:31.761: DEBUG/touchDown(224): X=475.0,Y=293.0
02-25 12:41:31.970: DEBUG/touchMove(224): X=475.0,Y=297.0
(中略)
02-25 12:41:34.080: DEBUG/touchMove(224): X=479.0,Y=317.0
02-25 12:41:34.362: DEBUG/touchUp(224): X=479.0,Y=317.0
02-25 12:41:34.451: DEBUG/touchMove(224): X=532.2222,Y=352.2222

QVGA(240*320)

02-25 12:57:48.169: DEBUG/touchDown(227): X=306.0,Y=181.0
02-25 12:57:48.429: DEBUG/touchMove(227): X=309.0,Y=215.0
(中略)
02-25 12:57:49.448: DEBUG/touchMove(227): X=318.0,Y=237.0
02-25 12:57:49.827: DEBUG/touchUp(227): X=318.0,Y=237.0
02-25 12:57:49.858: DEBUG/touchMove(227): X=530.0,Y=394.99997


???…さっぱり。やっぱdipは偶然だったのかな。


で、これには2つの問題があって、

1.ACTION_UPのあとにACTION_MOVEが来るのはおかしい
2.座標がおかしい

ですね。


大抵のケースでは、タッチに関連する状態をUpのときに完結させるのが普通だと思います。
なので、その後Moveがこようが変な座標だろうが問題にならないと思いますが…
もしこれでハマった人が居たら何かの参考になれば。


なお、気軽に試せる実機が無いので、
エミュレータだけの挙動なのか、実機もそうなのかはわかりません。


また、SurfaceViewでしか確認してないので
他のViewやViewのサブクラスでどうなのかもわかりません。

*1:Device Independent Pixels=端末から独立したPixel。DeviceじゃなくてDensityって人もいるけどどっちだろう。