在我的应用程序中,我有一个元素需要用户在屏幕上四处移动它,为此我使用了 RelativeLayout 和 onTouchListener。
我遇到的问题是,在我的 onTouchListener
中,我得到了一些关于 getX()
和 getY()的奇怪结果
.
我将以下代码行添加到我的 onTouch()
-> ACTION_MOVE
block 中:
Log.v("example", "Touch: {x:"+ event.getX() + "} {y:"+ event.getY() + "}");
下面是我的 LogCat 结果。
04-29 03:16:11.000: V/myApp(24188): Touch Down!
04-29 03:16:11.057: V/myApp(24188): Touch: {x:69.78699 } {y:107.774216}
04-29 03:16:11.103: V/myApp(24188): Touch: {x:77.86926 } {y:173.37648}
04-29 03:16:11.158: V/myApp(24188): Touch: {x:69.78699 } {y:108.781845}
04-29 03:16:11.205: V/myApp(24188): Touch: {x:77.86926 } {y:174.38597}
04-29 03:16:11.463: V/myApp(24188): Touch: {x:69.78699 } {y:109.64778}
04-29 03:16:11.502: V/myApp(24188): Touch: {x:77.86926 } {y:175.62172}
04-29 03:16:11.596: V/myApp(24188): Touch: {x:69.23099 } {y:109.40666}
04-29 03:16:11.654: V/myApp(24188): Touch Up!
如您所见,在直线上非常缓慢地移动我的手指,我得到了一个跳动的结果,其中正确的坐标实际上是每隔一条线。
当我在屏幕上拖动它时,这导致我的视图在所需位置和偏移位置之间来回跳动。
我添加了检查以确保我只创建了一个元素,并且这个监听器不会从这个单一 View 以外的任何地方调用。
有没有其他人以前见过这个问题,并且对我能做些什么来解决它有任何见解?
编辑
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;
}
};
最佳答案
我能够使用 event.getRawX()
和 event.getRawY()
解决这个问题。
关于java - Android onTouchEvent坐标跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273249/