移动动作抽搐

时间:2013-01-07 13:12:10

标签: android android-view android-event

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

1 个答案:

答案 0 :(得分:1)

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

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