返回介绍

4.​8. dragTo() 方法的实现

发布于 2024-12-23 21:11:41 字数 1170 浏览 0 评论 0 收藏 0
  private void dragTo(int left, int top, int dx, int dy) {
    int clampedX = left;
    int clampedY = top;
    final int oldLeft = mCapturedView.getLeft();
    final int oldTop = mCapturedView.getTop();
    if (dx != 0) {
      //回调 callback 来决定 View 最终被拖拽的 x 方向上的偏移量
      clampedX = mCallback.clampViewPositionHorizontal(mCapturedView, left, dx);
      //移动 View
      ViewCompat.offsetLeftAndRight(mCapturedView, clampedX - oldLeft);
    }
    if (dy != 0) {
      //回调 callback 来决定 View 最终被拖拽的 y 方向上的偏移量
      clampedY = mCallback.clampViewPositionVertical(mCapturedView, top, dy);
      //移动 View
      ViewCompat.offsetTopAndBottom(mCapturedView, clampedY - oldTop);
    }

    if (dx != 0 || dy != 0) {
      final int clampedDx = clampedX - oldLeft;
      final int clampedDy = clampedY - oldTop;
      //回调 callback
      mCallback.onViewPositionChanged(mCapturedView, clampedX, clampedY,
          clampedDx, clampedDy);
    }
  }

因为 dragTo() 方法是在 processTouchEvent() 中的 MotionEvent.ACTION_MOVE case 被调用所以当程序运行到这里时 View 就会不断的被拖动了。如果一旦手指释放则最终会调用 releaseViewForPointerUp() 方法

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。