MotionEvent.getX/.getY がどのように「信頼できない」(または他の用語) か、およびこれらの呼び出しの Raw バージョンを使用して座標を取得する必要があるかについて、多くの議論があります。
私の Nexus 7 では、.getX/.getY がインターリーブされた絶対座標と相対座標を確実に返すことを発見しました。つまり、特定の ACTION_MOVE イベントが、.getX および .getY を呼び出したときに絶対座標を返すとします。次の ACTION_MOVE イベントは、その .getX および .getY 呼び出しで相対座標を返します。
これは偶発的な動作ではありません。また、特定の ACTION_MOVE が絶対座標または相対座標を返すかどうかを識別する方法が必要であると私は信じています。
特定の MotionEvent オブジェクトをチェックして、.getX および .getY 呼び出しで絶対座標と相対座標を返すかどうかを確認する方法を知っている人はいますか?
編集:あなたの要求に従って、ここにコードがあります。座標を取得して View オブジェクトを移動するだけです。
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.getX();
fY = event.getY();
v.setX(fX);
v.setY(fY);
Log.d("",("X: " + fX + ", Y: " + fY));
}
else if (MotionEvent.ACTION_DOWN != iAction) {
bExitValue = false;
}
return(bExitValue);
}
Log.d 呼び出しとスタンドアロン フロートは、コードを機能させるために必要ではありませんが、LogCat ウィンドウで値のインターリーブを確認できます。