OSDN Git Service

Fix custom content state for scroll in RTL (issue 11068877)
authorAdam Cohen <adamcohen@google.com>
Wed, 9 Oct 2013 21:47:32 +0000 (14:47 -0700)
committerAdam Cohen <adamcohen@google.com>
Wed, 9 Oct 2013 21:48:01 +0000 (14:48 -0700)
Change-Id: I731c55e3e4e01ef42eba94c002d0fde296dd9540

src/com/android/launcher3/PagedView.java
src/com/android/launcher3/Workspace.java

index c6cf3a3..2a339c0 100644 (file)
@@ -1528,6 +1528,19 @@ public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarc
         }
     }
 
+    // While layout transitions are occurring, a child's position may stray from its baseline
+    // position. This method returns the magnitude of this stray at any given time.
+    public int getLayoutTransitionOffsetForPage(int index) {
+        if (mPageScrolls == null || index >= mPageScrolls.length || index < 0) {
+            return 0;
+        } else {
+            View child = getChildAt(index);
+            int scrollOffset = (getViewportWidth() - child.getMeasuredWidth()) / 2;
+            int baselineX = mPageScrolls[index] + scrollOffset + getViewportOffsetX();
+            return (int) (child.getX() - baselineX);
+        }
+    }
+
     // This curve determines how the effect of scrolling over the limits of the page dimishes
     // as the user pulls further and further from the bounds
     private float overScrollInfluenceCurve(float f) {
index a23d7d0..4515b03 100644 (file)
@@ -1387,7 +1387,9 @@ public class Workspace extends SmoothPagedView
         float progress = 0;
         if (hasCustomContent()) {
             int index = mScreenOrder.indexOf(CUSTOM_CONTENT_SCREEN_ID);
-            int scrollDelta = getScrollForPage(index + 1) - getScrollX();
+
+            int scrollDelta = getScrollForPage(index + 1) - getScrollX() +
+                    getLayoutTransitionOffsetForPage(index + 1);
             translationX = scrollDelta;
             progress = (1.0f * scrollDelta) /
                     (getScrollForPage(index + 1) - getScrollForPage(index));