Skip to content

Commit d01b2fa

Browse files
committed
Added fix for setExpanded
1 parent f87c541 commit d01b2fa

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

smooth-app-bar-layout/src/main/java/me/henrytao/smoothappbarlayout/BaseBehavior.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ protected abstract void onScrollChanged(CoordinatorLayout coordinatorLayout, App
5353

5454
private DragCallback mDragCallbackListener;
5555

56+
private boolean mIsCollapsed;
57+
5658
private boolean mIsOnInit = false;
5759

5860
private boolean mIsPullDownFromTop;
@@ -147,6 +149,14 @@ public int getCurrentOffset() {
147149
return mCurrentOffset;
148150
}
149151

152+
public View getScrollTarget() {
153+
return vScrollTarget;
154+
}
155+
156+
public boolean isCollapsed() {
157+
return mIsCollapsed;
158+
}
159+
150160
public void setOverrideOnScrollListener(boolean overrideOnScrollListener) {
151161
mOverrideOnScrollListener = overrideOnScrollListener;
152162
}
@@ -186,6 +196,7 @@ protected long getViewTag(View target, boolean createIfNotExist) {
186196

187197
protected void syncOffset(AppBarLayout child, int newOffset) {
188198
Utils.log("syncOffset | %d", newOffset);
199+
mIsCollapsed = newOffset == mCurrentOffset && mCurrentOffset != 0;
189200
setTopAndBottomOffset(newOffset);
190201
if (child instanceof SmoothAppBarLayout && ((SmoothAppBarLayout) child).mHaveChildWithInterpolator && mCoordinatorLayout != null) {
191202
mCoordinatorLayout.dispatchDependentViewsChanged(child);

smooth-app-bar-layout/src/main/java/me/henrytao/smoothappbarlayout/SmoothAppBarLayout.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import android.support.design.widget.CoordinatorLayout;
2525
import android.support.v4.view.ViewCompat;
2626
import android.support.v4.view.ViewPager;
27+
import android.support.v4.widget.NestedScrollView;
28+
import android.support.v7.widget.RecyclerView;
2729
import android.util.AttributeSet;
2830
import android.util.Log;
2931
import android.view.View;
@@ -110,6 +112,65 @@ public void removeOnOffsetChangedListener(OnOffsetChangedListener listener) {
110112
}
111113
}
112114

115+
@Override
116+
public void setExpanded(boolean expanded) {
117+
setExpanded(expanded, false);
118+
}
119+
120+
@Override
121+
public void setExpanded(boolean expanded, boolean animate) {
122+
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) getLayoutParams();
123+
Behavior behavior = (Behavior) params.getBehavior();
124+
if (behavior == null) {
125+
super.setExpanded(expanded, animate);
126+
return;
127+
}
128+
View view = behavior.getScrollTarget();
129+
if (!expanded && !behavior.isCollapsed()) {
130+
int minOffset = Math.abs(behavior.getMinOffset(this));
131+
if (view instanceof RecyclerView) {
132+
RecyclerView recyclerView = (RecyclerView) view;
133+
int offset = minOffset - recyclerView.computeVerticalScrollOffset();
134+
if (animate) {
135+
recyclerView.smoothScrollBy(0, offset);
136+
} else {
137+
recyclerView.scrollBy(0, offset);
138+
}
139+
} else if (view instanceof NestedScrollView) {
140+
NestedScrollView nestedScrollView = (NestedScrollView) view;
141+
if (animate) {
142+
nestedScrollView.smoothScrollTo(0, minOffset);
143+
} else {
144+
nestedScrollView.scrollTo(0, minOffset);
145+
}
146+
}
147+
} else if (expanded) {
148+
if (view instanceof RecyclerView) {
149+
RecyclerView recyclerView = (RecyclerView) view;
150+
if (animate) {
151+
if (behavior.isCollapsed()) {
152+
recyclerView.smoothScrollToPosition(0);
153+
} else {
154+
recyclerView.smoothScrollBy(0, -recyclerView.computeVerticalScrollOffset());
155+
}
156+
} else {
157+
if (behavior.isCollapsed()) {
158+
recyclerView.scrollToPosition(0);
159+
} else {
160+
recyclerView.scrollBy(0, -recyclerView.computeVerticalScrollOffset());
161+
}
162+
}
163+
} else if (view instanceof NestedScrollView) {
164+
NestedScrollView nestedScrollView = (NestedScrollView) view;
165+
if (animate) {
166+
nestedScrollView.smoothScrollTo(0, 0);
167+
} else {
168+
nestedScrollView.scrollTo(0, 0);
169+
}
170+
}
171+
}
172+
}
173+
113174
@Override
114175
protected void onAttachedToWindow() {
115176
super.onAttachedToWindow();

0 commit comments

Comments
 (0)