diff options
-rw-r--r-- | src/com/android/launcher2/DragView.java | 8 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 7 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java index a8dad7a..433dab8 100644 --- a/src/com/android/launcher2/DragView.java +++ b/src/com/android/launcher2/DragView.java @@ -123,6 +123,14 @@ public class DragView extends View { // The point in our scaled bitmap that the touch events are located mRegistrationX = registrationX; mRegistrationY = registrationY; + + // Force a measure, because Workspace uses getMeasuredHeight() before the layout pass + int ms = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + measure(ms, ms); + } + + public float getOffsetY() { + return mOffsetY; } public void setDragRegion(int left, int top, int width, int height) { diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 540b373..2e2c441 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -2257,6 +2257,13 @@ public class Workspace extends SmoothPagedView dragView.getDragRegionHeight()); } } + } else if (source == this) { + // When dragging from the workspace, the drag view is slightly bigger than + // the original view, and offset vertically. Adjust to account for this. + final View origView = mDragInfo.cell; + originX += (dragView.getMeasuredWidth() - origView.getWidth()) / 2; + originY += (dragView.getMeasuredHeight() - origView.getHeight()) / 2 + + dragView.getOffsetY(); } if (mDragTargetLayout != null) { |