[英]Detect top of RecyclerView which has more than one column?
我在上面的RecyclerView中有一个高度大于255像素的AppBarLayout。 当用户滚动RecyclerView时,AppBarLayout有一个问题。 为了避免这种情况,我决定手动扩展AppBarLayout。 我的RecyclerView由GridLayoutManager组成,跨度为3。我使用下面的代码来监听RecyclerView的顶部
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int firstVisiblePosition = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
if (firstVisiblePosition == 0) {
appBarLayout.setExpanded(true, true);
}
}
}
});
但问题是,现在我无法向上滚动recyclerview
一种可能的解决方案是滚动带有动画的应用栏。
if (mIsAppBarExpanded) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
final AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
ValueAnimator valueAnimator = ValueAnimator.ofInt();
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
behavior.setTopAndBottomOffset((Integer) animation.getAnimatedValue());
mAppBarLayout.requestLayout();
}
});
valueAnimator.setIntValues(0, -mAppBarLayout.getTotalScrollRange());
valueAnimator.setDuration(400);
valueAnimator.start();
}
}
检查应用栏是否已折叠
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
mIsAppBarExpanded = Math.abs(verticalOffset) != appBarLayout.getTotalScrollRange();
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.