예제 #1
0
 public void forceTouchMove() {
   int[] dummyCoordinates = mCoordinatesTemp;
   DropTarget dropTarget = findDropTarget(mLastTouch[0], mLastTouch[1], dummyCoordinates);
   mDragObject.x = dummyCoordinates[0];
   mDragObject.y = dummyCoordinates[1];
   checkTouchMove(dropTarget);
 }
예제 #2
0
  private void dropOnFlingToDeleteTarget(float x, float y, PointF vel) {
    final int[] coordinates = mCoordinatesTemp;

    mDragObject.x = coordinates[0];
    mDragObject.y = coordinates[1];

    // Clean up dragging on the target if it's not the current fling delete
    // target otherwise,
    // start dragging to it.
    if (mLastDropTarget != null && mFlingToDeleteDropTarget != mLastDropTarget) {
      mLastDropTarget.onDragExit(mDragObject);
    }

    // Drop onto the fling-to-delete target
    boolean accepted = false;
    mFlingToDeleteDropTarget.onDragEnter(mDragObject);
    // We must set dragComplete to true _only_ after we "enter" the
    // fling-to-delete target for
    // "drop"
    mDragObject.dragComplete = true;
    mFlingToDeleteDropTarget.onDragExit(mDragObject);
    if (mFlingToDeleteDropTarget.acceptDrop(mDragObject)) {
      mFlingToDeleteDropTarget.onFlingToDelete(mDragObject, mDragObject.x, mDragObject.y, vel);
      accepted = true;
    }
    mDragObject.dragSource.onDropCompleted(
        (View) mFlingToDeleteDropTarget, mDragObject, true, accepted);
  }
예제 #3
0
  private void drop(float x, float y) {
    final int[] coordinates = mCoordinatesTemp;
    final DropTarget dropTarget = findDropTarget((int) x, (int) y, coordinates);

    mDragObject.x = coordinates[0];
    mDragObject.y = coordinates[1];
    boolean accepted = false;
    if (dropTarget != null) {
      mDragObject.dragComplete = true;
      dropTarget.onDragExit(mDragObject);
      if (dropTarget.acceptDrop(mDragObject)) {
        dropTarget.onDrop(mDragObject);
        accepted = true;
      }
    }
    mDragObject.dragSource.onDropCompleted((View) dropTarget, mDragObject, false, accepted);
  }
예제 #4
0
  private void handleMoveEvent(int x, int y) {
    mDragObject.dragView.move(x, y);

    // Drop on someone?
    final int[] coordinates = mCoordinatesTemp;
    DropTarget dropTarget = findDropTarget(x, y, coordinates);
    mDragObject.x = coordinates[0];
    mDragObject.y = coordinates[1];
    checkTouchMove(dropTarget);

    // Check if we are hovering over the scroll areas
    mDistanceSinceScroll +=
        Math.sqrt(Math.pow(mLastTouch[0] - x, 2) + Math.pow(mLastTouch[1] - y, 2));
    mLastTouch[0] = x;
    mLastTouch[1] = y;
    checkScrollState(x, y);
  }
예제 #5
0
  private DropTarget findDropTarget(int x, int y, int[] dropCoordinates) {
    final Rect r = mRectTemp;

    final ArrayList<DropTarget> dropTargets = mDropTargets;
    final int count = dropTargets.size();
    for (int i = count - 1; i >= 0; i--) {
      DropTarget target = dropTargets.get(i);
      if (!target.isDropEnabled()) continue;

      target.getHitRectRelativeToDragLayer(r);

      mDragObject.x = x;
      mDragObject.y = y;
      if (r.contains(x, y)) {

        dropCoordinates[0] = x;
        dropCoordinates[1] = y;
        mLauncher.getDragLayer().mapCoordInSelfToDescendent((View) target, dropCoordinates);

        return target;
      }
    }
    return null;
  }