Fix 3099036: Drag visualization appears in wrong spot
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 @@
// 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 @@
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) {