diff --git a/gradle.properties b/gradle.properties index 61bd5de0..4c0bae3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -44,7 +44,7 @@ GROUP=com.alibaba.android ARTIFACT=vlayout VERSION=1 -VERSION_NAME=1.2.25 +VERSION_NAME=1.2.26 PACKAGING_TYPE=aar useNewSupportLibrary=true systemProp.compileSdkVersion=26 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 9869032f..4cf267e1 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 @@ -24,7 +24,13 @@ package com.alibaba.android.vlayout.layout; -import java.util.Arrays; +import android.support.annotation.NonNull; +import android.support.v4.util.ArrayMap; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.Recycler; +import android.support.v7.widget.RecyclerView.State; +import android.util.Log; +import android.view.View; import com.alibaba.android.vlayout.LayoutManagerHelper; import com.alibaba.android.vlayout.OrientationHelperEx; @@ -35,13 +41,7 @@ import com.alibaba.android.vlayout.layout.GridLayoutHelper.DefaultSpanSizeLookup; import com.alibaba.android.vlayout.layout.GridLayoutHelper.SpanSizeLookup; -import android.support.annotation.NonNull; -import android.support.v4.util.ArrayMap; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.RecyclerView.Recycler; -import android.support.v7.widget.RecyclerView.State; -import android.util.Log; -import android.view.View; +import java.util.Arrays; import static android.support.v7.widget.LinearLayoutManager.VERTICAL; @@ -258,8 +258,8 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state if (!layingOutInPrimaryDirection) { // fill the remaining spacing this row - int itemSpanIndex = getSpanIndex(rangeStyle.mSpanSizeLookup, rangeStyle.mSpanCount, recycler, state, layoutState.getCurrentPosition()); - int itemSpanSize = getSpanSize(rangeStyle.mSpanSizeLookup, recycler, state, layoutState.getCurrentPosition()); + int itemSpanIndex = getSpanIndex(rangeStyle.mSpanSizeLookup, rangeStyle.mSpanCount, recycler, state, currentPosition); + int itemSpanSize = getSpanSize(rangeStyle.mSpanSizeLookup, recycler, state, currentPosition); remainingSpan = itemSpanIndex + itemSpanSize; @@ -343,20 +343,12 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state break; // item did not fit into this row or column } - View view = layoutState.next(recycler); - if (view == null) { - break; - } - if (!isStartLine) { isStartLine = helper.getReverseLayout() ? pos == mRangeStyle.getRange().getUpper().intValue() : pos == mRangeStyle.getRange().getLower().intValue(); } if (!isSecondStartLine) { if (!rangeStyle.equals(mRangeStyle)) { - if (mLayoutWithAnchor) { - pos = layoutState.getCurrentPosition(); - } isSecondStartLine = helper.getReverseLayout() ? pos == rangeStyle.getRange().getUpper() .intValue() : pos == rangeStyle.getRange().getLower().intValue(); } @@ -369,14 +361,19 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state if (!isSecondEndLine) { if (!rangeStyle.equals(mRangeStyle)) { - if (mLayoutWithAnchor) { - pos = layoutState.getCurrentPosition(); - } isSecondEndLine = helper.getReverseLayout() ? pos == rangeStyle.getRange().getLower() .intValue() : pos == rangeStyle.getRange().getUpper().intValue(); + if (DEBUG) { + Log.d(TAG, "isSecondEndLineLogic:" + isSecondEndLine + " helper.getReverseLayout()=" + helper.getReverseLayout() + " pos=" + pos + " rangeStyle.getRange().getLower()=" + rangeStyle.getRange().getLower() + " rangeStyle.getRange().getUpper()=" + rangeStyle.getRange().getUpper()); + } } } + View view = layoutState.next(recycler); + if (view == null) { + break; + } + consumedSpanCount += spanSize; rangeStyle.mSet[count] = view; count++; @@ -528,6 +525,9 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state if (isSecondEndLine) { secondEndSpace = (layoutInVertical ? rangeStyle.getMarginBottom() + rangeStyle.getPaddingBottom() : rangeStyle.getMarginRight() + rangeStyle.getPaddingRight()); + if (DEBUG) { + Log.d(TAG, "isSecondEndLineLogic:" + isSecondEndLine + " pos=" + currentPosition + " secondEndSpace=" + secondEndSpace); + } } @@ -613,8 +613,8 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state if (DEBUG) { Log.d(TAG, - (layoutStart ? "⬆ " : "⬇ ") + currentPosition + " consumed " + result.mConsumed + " startSpace " + startSpace + " endSpace " - + endSpace + " secondStartSpace " + secondStartSpace + " secondEndSpace " + secondEndSpace + " lastUnconsumedSpace " + lastUnconsumedSpace); + (layoutStart ? "⬆ " : "⬇ ") + currentPosition + " consumed " + result.mConsumed + " startSpace " + startSpace + " endSpace " + + endSpace + " secondStartSpace " + secondStartSpace + " secondEndSpace " + secondEndSpace + " lastUnconsumedSpace " + lastUnconsumedSpace + " isSecondEndLine=" + isSecondEndLine); } int left = 0, right = 0, top = 0, bottom = 0; @@ -670,7 +670,7 @@ public void layoutViews(RecyclerView.Recycler recycler, RecyclerView.State state if (DEBUG) { Log.d(TAG, "layout item in position: " + params.getViewPosition() + " with text with SpanIndex: " + index + " into (" + - left + ", " + top + ", " + right + ", " + bottom + " )"); + left + ", " + top + ", " + right + ", " + bottom + "), topInfo=[layoutState.getOffset()=" + layoutState.getOffset() + " startSpace=" + startSpace + " secondStartSpace=" + secondStartSpace + " consumedGap=" + consumedGap + " lastUnconsumedSpace=" + lastUnconsumedSpace + "]"); } // We calculate everything with View's bounding box (which includes decor and margins)