1

我有一个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);
}
4

1 回答 1

1

问题很简单:您正在使用两个相对坐标。如果您onTouchEvent()从视图中覆盖,您可能会得到一个值 10,10。如果您现在移动手指,您会得到一个新值,比如说 9,9,因此您更改视图的位置,这将导致您的手指再次位于视图坐标系的 10,10。

我会做什么:覆盖onTouchEvent()父级的,以便您保持在同一个坐标系中。您的实现看起来不错,因此当您将代码移动到父视图/活动时,它应该很容易工作。

于 2013-01-07T13:19:18.030 回答