我有一个View
我希望它可以拖动,所以我覆盖了它的onTouchEvent(MotionEvent event)
方法,并且在移动事件时,我根据事件操作重新定位/翻译我的View
(x,y)坐标。然而!在拖动我的View
右边 - 例如 - 我看到事件动作的x坐标没有稳定增加(即...... 15,16,17,18 ......)但是交错了(即...... 15,23,16,24,17,25 ......)因此我的View
以猛烈的方式移动。 (同样,左,上,下等拖动。)
任何人都知道为什么会这样,以及如何避免它?!
这是我的onTouchEvent(..)
方法......
@Override
public boolean onTouchEvent(MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
// make note of the down action's (x, y) coordinate
action_down_x = event.getX();
action_down_y = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
// work out displacement
dX = event.getX() - action_down_x;
dY = event.getY() - action_down_y;
// code here to move the view
return true;
case MotionEvent.ACTION_UP:
return true;
}
return super.onTouchEvent(event);
}
答案 0 :(得分:1)
问题非常简单:您正在使用两个相对坐标。如果您从视图中覆盖onTouchEvent()
,则可能会获得值10,10。如果您现在移动手指,则会得到一个新值,比方说9,9,这样您就可以更改视图的位置,从而导致手指再次位于视图坐标系的10,10处。
我会做什么:覆盖父级的onTouchEvent()
,以便您保持在相同的坐标系中。您的实现看起来不错,因此当您将代码移动到父视图/活动时它应该很容易。