返回介绍

4.​7. tryCaptureViewForDrag() 方法

发布于 2024-12-23 21:11:41 字数 1309 浏览 0 评论 0 收藏 0

  boolean tryCaptureViewForDrag(View toCapture, int pointerId) {
    //如果已经捕获该 View 直接返回 true
    if (toCapture == mCapturedView && mActivePointerId == pointerId) {
      // Already done!
      return true;
    }
    //根据 mCallback.tryCaptureView() 方法来最终决定是否可以捕获 View
    if (toCapture != null && mCallback.tryCaptureView(toCapture, pointerId)) {
      mActivePointerId = pointerId;
      //如果可以则调用 captureChildView(),并返回 true
      captureChildView(toCapture, pointerId);
      return true;
    }
    return false;
  }

可以看到如果可以捕获 View 则调用了 captureChildView() 方法:

  public void captureChildView(View childView, int activePointerId) {
    if (childView.getParent() != mParentView) {
      throw new IllegalArgumentException("captureChildView: parameter must be a descendant " +
          "of the ViewDragHelper's tracked parent view (" + mParentView + ")");
    }
    //赋值 mCapturedView
    mCapturedView = childView;
    mActivePointerId = activePointerId;
    //回调 callback
    mCallback.onViewCaptured(childView, activePointerId);
    //设定 mDragState 的状态为 STATE_DRAGGING
    setDragState(STATE_DRAGGING);
  }

如果程序执行到这里,就证明 View 已经处于拖拽状态了,后续的触摸操作,将直接根据 mDragStateSTATE_DRAGGING 的状态处理。

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

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

发布评论

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