android拖动视图流畅

Bud*_*ril 15 android smooth view drag

我必须在屏幕上拖一些视图.我正在修改他们的位置,通过从触摸侦听器更改ACTION_MOVE上的运动事件的布局参数的左侧和顶部.有没有办法"拖动"项目更顺畅?因为那种"拖动"根本就不顺利......这是代码

public boolean onTouch(View view, MotionEvent motionEvent) {
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            dx = (int) motionEvent.getX();
            dy = (int) motionEvent.getY();
            break;

        case MotionEvent.ACTION_MOVE:
            int x = (int) motionEvent.getX();
            int y = (int) motionEvent.getY();
            RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams();
            int left = lp.leftMargin + (x - dx);
            int top = lp.topMargin + (y - dy);
            lp.leftMargin = left;
            lp.topMargin = top;
            view.setLayoutParams(lp);
            break;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rez 22

尝试使用motionEvent.getRawX()和motionEvent.getRawY()而不是getY和getX


Aji*_*ngh 8

您无需使用 LayoutParameters 进行拖动。您只需设置视图的 X 和 Y 坐标即可。您可以在此处阅读更多相关信息

你可以做这样的事情。

  @Override
  public boolean onTouch(View view, MotionEvent event) {
    switch (event.getActionMasked()) {
      case MotionEvent.ACTION_DOWN:
        dX = view.getX() - event.getRawX();
        dY = view.getY() - event.getRawY();
        break;

      case MotionEvent.ACTION_MOVE:
        view.setY(event.getRawY() + dY);
        view.setX(event.getRawX() + dX);
        break;

      default:
        return false;
    }
    return true;
  }
Run Code Online (Sandbox Code Playgroud)


Sam*_*eer 0

了解您如何处理 ACTION_MOVE 事件会很有用。您是否使用 event.getHistorical() 方法利用所有点?如果这不能给你带来更平滑的拖动,其他想法可能是在路径上插入点。我相信在实现运动的平滑性和对用户触摸的快速响应之间需要进行权衡。HTH。