From e68722d1dad20b79a038d20d3645bcd3bcbd02a9 Mon Sep 17 00:00:00 2001 From: longerian Date: Sun, 7 Jan 2018 19:24:13 +0800 Subject: [PATCH] fix startSpace and endSpace error when layout from end to start --- .../android/vlayout/ExposeLinearLayoutManagerEx.java | 11 +++++++++++ .../android/vlayout/layout/BaseLayoutHelper.java | 11 +++-------- .../android/vlayout/layout/RangeGridLayoutHelper.java | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/vlayout/src/main/java/com/alibaba/android/vlayout/ExposeLinearLayoutManagerEx.java b/vlayout/src/main/java/com/alibaba/android/vlayout/ExposeLinearLayoutManagerEx.java index ec3d5f0a..59ca1ca5 100644 --- a/vlayout/src/main/java/com/alibaba/android/vlayout/ExposeLinearLayoutManagerEx.java +++ b/vlayout/src/main/java/com/alibaba/android/vlayout/ExposeLinearLayoutManagerEx.java @@ -1739,11 +1739,22 @@ public void assignFromView(View child) { if (mLayoutFromEnd) { mCoordinate = mOrientationHelper.getDecoratedEnd(child) + computeAlignOffset(child, mLayoutFromEnd, true) + mOrientationHelper.getTotalSpaceChange(); + if (DEBUG) { + Log.d(TAG, "1 mLayoutFromEnd " + mLayoutFromEnd + " mOrientationHelper.getDecoratedEnd(child) " + + mOrientationHelper.getDecoratedEnd(child) + " computeAlignOffset(child, mLayoutFromEnd, true) " + computeAlignOffset(child, mLayoutFromEnd, true)); + } } else { mCoordinate = mOrientationHelper.getDecoratedStart(child) + computeAlignOffset(child, mLayoutFromEnd, true); + if (DEBUG) { + Log.d(TAG, "2 mLayoutFromEnd " + mLayoutFromEnd + " mOrientationHelper.getDecoratedStart(child) " + + mOrientationHelper.getDecoratedStart(child) + " computeAlignOffset(child, mLayoutFromEnd, true) " + computeAlignOffset(child, mLayoutFromEnd, true)); + } } mPosition = getPosition(child); + if (DEBUG) { + Log.d(TAG, "position " + mPosition + " mCoordinate " + mCoordinate); + } } } diff --git a/vlayout/src/main/java/com/alibaba/android/vlayout/layout/BaseLayoutHelper.java b/vlayout/src/main/java/com/alibaba/android/vlayout/layout/BaseLayoutHelper.java index f66e8f4e..b67040b0 100644 --- a/vlayout/src/main/java/com/alibaba/android/vlayout/layout/BaseLayoutHelper.java +++ b/vlayout/src/main/java/com/alibaba/android/vlayout/layout/BaseLayoutHelper.java @@ -549,16 +549,12 @@ protected int computeStartSpace(LayoutManagerHelper helper, boolean layoutInVert return 0; if (!isOverLapMargin) { - startSpace = layoutInVertical - ? (isLayoutEnd ? mMarginTop + mPaddingTop : mMarginBottom + mPaddingBottom) - : (isLayoutEnd ? mMarginLeft + mPaddingLeft : mMarginRight + mPaddingRight); + startSpace = layoutInVertical ? mMarginTop + mPaddingTop : mMarginLeft + mPaddingLeft; } else { int offset = 0; if (lastMarginLayoutHelper == null) { - offset = layoutInVertical - ? (isLayoutEnd ? mMarginTop + mPaddingTop : mMarginBottom + mPaddingBottom) - : (isLayoutEnd ? mMarginLeft + mPaddingLeft : mMarginRight + mPaddingRight); + offset = layoutInVertical ? mMarginTop + mPaddingTop : mMarginLeft + mPaddingLeft; } else { offset = layoutInVertical ? (isLayoutEnd ? calGap(lastMarginLayoutHelper.mMarginBottom, mMarginTop) : calGap(lastMarginLayoutHelper.mMarginTop, mMarginBottom)) @@ -576,8 +572,7 @@ protected int computeStartSpace(LayoutManagerHelper helper, boolean layoutInVert protected int computeEndSpace(LayoutManagerHelper helper, boolean layoutInVertical, boolean isLayoutEnd, boolean isOverLapMargin) { int endSpace = layoutInVertical - ? (isLayoutEnd ? mMarginBottom + mPaddingBottom : mMarginTop + mPaddingTop) - : (isLayoutEnd ? mMarginRight + mPaddingRight : mMarginLeft + mPaddingLeft); + ? mMarginBottom + mPaddingBottom : mMarginLeft + mPaddingLeft; //Log.e("huang", "computeEndSpace offset: " + endSpace + ", isLayoutEnd: " + isLayoutEnd + ", " + this); //Log.e("huang", "===================\n\n"); return endSpace; diff --git a/vlayout/src/main/java/com/alibaba/android/vlayout/layout/RangeGridLayoutHelper.java b/vlayout/src/main/java/com/alibaba/android/vlayout/layout/RangeGridLayoutHelper.java index 12b210db..9869032f 100644 --- a/vlayout/src/main/java/com/alibaba/android/vlayout/layout/RangeGridLayoutHelper.java +++ b/vlayout/src/main/java/com/alibaba/android/vlayout/layout/RangeGridLayoutHelper.java @@ -977,7 +977,7 @@ public static int computeStartAlignOffset(GridRangeStyle rangeStyle, boolean lay for (int i = 0, size = rangeStyle.mChildren.size(); i < size; i++) { GridRangeStyle childRangeStyle = rangeStyle.mChildren.valueAt(i); if (!childRangeStyle.isChildrenEmpty()){ - //FIXEME may compute the wrong start space here + //FIXME may compute the wrong start space here offset += computeStartAlignOffset(childRangeStyle, layoutInVertical); }else if (childRangeStyle.mRange.getLower().intValue() == startPosition) { offset += (layoutInVertical ? -childRangeStyle.mMarginTop - childRangeStyle.mPaddingTop