私のアプリには、ユーザーが画面上で移動する必要がある要素があります。これを行うには、RelativeLayout と onTouchListener を使用しています。
私が抱えている問題は、私の内部で、とonTouchListener
の奇妙な結果が得られることです。getX()
getY()
次のコード行をonTouch()
->ACTION_MOVE
ブロックに追加しました。
Log.v("example", "Touch: {x:" + event.getX() + " } {y:" + event.getY() + "}");
以下は私の LogCat の結果です。
04-29 03:16:11.000: V/myApp(24188): タッチダウン!
04-29 03:16:11.057: V/myApp(24188): タッチ: {x:69.78699} {y:107.774216}
04-29 03:16:11.103: V/myApp(24188): タッチ: {x:77.86926 {y:173.37648}
04-29 03:16:11.158: V/myApp(24188): タッチ: {x:69.78699} {y:108.781845}
04-29 03:16:11.205: V/myApp(24188):タッチ: {x:77.86926} {y:174.38597}
04-29 03:16:11.463: V/myApp(24188): タッチ: {x:69.78699} {y:109.64778}
04-29 03:16:11.502: V /myApp(24188): タッチ: {x:77.86926} {y:175.62172}
04-29 03:16:11.596: V/myApp(24188): タッチ: {x:69.23099} {y:109.40666}
04-29 03 :16:11.654: V/myApp(24188): タッチアップ!
ご覧のとおり、指を直線上で非常にゆっくりと動かすと、正しい座標が実際には 1 本おきの線になっている、びくびくした結果が得られます。
これにより、画面上でドラッグすると、ビューが目的の位置とオフセット位置の間で前後にジャンプします。
単一の要素のみを作成していること、およびこのリスナーがこの単一のビュー以外から呼び出されていないことを確認するためにチェックを追加しました。
他の誰かがこの問題を以前に見たことがあり、それを修正するために何ができるかについて何か洞察がありますか?
編集
View.OnTouchListener onTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d("example", "Touch down");
break;
case MotionEvent.ACTION_UP:
Log.d("example", "Touch up");
break;
case MotionEvent.ACTION_MOVE:
Log.v("example", "Touch: {x:" + event.getX() + " } {y:" + event.getY() + "}");
}
return true;
}
};