在回收站视图中滚动 hiding/showing 时视图闪烁
View flicking while hiding/showing on scroll in recycler view
我在底部有线性布局,我想在向上滚动时隐藏该视图并在向下滚动时显示。我能够通过 recycler view 上的滚动监听器实现这一点。但是有一个问题,当您滚动时,缓慢的视图会闪烁(快速显示和隐藏)。
这是我的代码
bottom = (LinearLayout) getActivity().findViewById(R.id.linerabottom);
recycleList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
bottom.setVisibility(View.GONE);
} else {
bottom.setVisibility(View.VISIBLE);
}
}
});
这是问题的视频https://goo.gl/photos/TwUJjmPUA4kJCsaR8。
你能帮我找出问题所在吗?
谢谢。
这很正常,因为您的 dy
在某个时间点在 dy >= 0
和 dy < 0
之间波动。如果你想实现某种快速 return 视图,你应该将它绑定到这样的东西:
recycleList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
mTotalDy += dy;
if (dy > 0 && mTotalDy >= bottom.getHeight()) {
bottom.setVisibility(View.GONE);
} else if(recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE && bottom.getVisiblity() == View.GONE) {
bottom.setVisibility(View.VISIBLE);
mTotalDy = 0;
}
}
});
我在底部有线性布局,我想在向上滚动时隐藏该视图并在向下滚动时显示。我能够通过 recycler view 上的滚动监听器实现这一点。但是有一个问题,当您滚动时,缓慢的视图会闪烁(快速显示和隐藏)。
这是我的代码
bottom = (LinearLayout) getActivity().findViewById(R.id.linerabottom);
recycleList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
bottom.setVisibility(View.GONE);
} else {
bottom.setVisibility(View.VISIBLE);
}
}
});
这是问题的视频https://goo.gl/photos/TwUJjmPUA4kJCsaR8。
你能帮我找出问题所在吗? 谢谢。
这很正常,因为您的 dy
在某个时间点在 dy >= 0
和 dy < 0
之间波动。如果你想实现某种快速 return 视图,你应该将它绑定到这样的东西:
recycleList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
mTotalDy += dy;
if (dy > 0 && mTotalDy >= bottom.getHeight()) {
bottom.setVisibility(View.GONE);
} else if(recyclerView.getScrollState() == RecyclerView.SCROLL_STATE_IDLE && bottom.getVisiblity() == View.GONE) {
bottom.setVisibility(View.VISIBLE);
mTotalDy = 0;
}
}
});