健全性チェックが必要です。
ビュー内で ACTION_DOWN が発生した場合、そのビューの onTouch は、接触点がビューを離れても ACTION_MOVE イベントを取得し続けます (!!!)。
同様に、ACTION_DOWN がビューの外にある場合、そのタッチがビューの領域に移動しても、何も受信しません。
これは、ACTION_DOWN がそのタッチ イベントとビューとの最初の関連付けを確立し、タッチ座標がどこにローミングしても、その関連付けがビューの存続期間中に変更されないことを示唆しています。なぜそれが良いアイデアなのか想像できないので、オプションか不完全な初期化か何かだと思っています。
これが私の onTouch です。座標を LogCat に表示する以外に特別なことはありません。
public boolean onTouch(View v,MotionEvent event) {
boolean bExitValue = true;
float fX;
float fY;
int iAction;
iAction = event.getActionMasked();
if (MotionEvent.ACTION_MOVE == iAction) {
fX = event.getRawX();
fY = event.getRawY();
Log.d("",("X: " + fX + ", Y: " + fY));
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
(はい、ローカル フロートを使用しない方が効率的であることはわかっています。これを使用して実験しているので、他のテストの副産物です。)
これは意図的な動作ですか?MotionEvents が、ユーザーが触れている場所でさえないビューに報告されるのは、本当に奇妙に思えます。これは、X/Y がビューの境界内にあることをコードが毎回手動で確認する必要があることを意味します。あれは正しいですか?
ありがとう!