ScrollingTricks
仿商城等滑动至最顶端时,顶部TAB悬浮、固定
示例
单一TAB顶部悬浮、固定
实现原理
:布局中有2个Tab,一个Tab一直处于顶部,另一个在ScrollView中。当滑动时,处于顶部的Tab显示,ScrollView中的隐藏;否则反之。
实现代码
:需要重写ScrollView,添加一个滚动监听器
public void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy) {
if (topView != null) {
if (y > topView.getHeight()) {//Y轴上滑位移大于顶部tab高度时
floatView.setVisibility(View.VISIBLE);
}else {
floatView.setVisibility(View.GONE);
}
}
}
多组Tab顶部悬浮、固定
实现原理
:这里使用的是RecyclerView,原理同上个。
实现代码
:RecyclerView滚动监听
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
curPosition = mLayoutManager.findFirstVisibleItemPosition();
mTextView.setY(0);//初始时 tab处于悬浮状态
if (mAdapter.getItemViewType(curPosition + 1) == RecyclerViewAdapter.TYPE_GROUP) {
View viewByPosition = mLayoutManager.findViewByPosition(curPosition + 1);
if (viewByPosition.getTop() > mTextView.getHeight()) {//判断tab悬浮时的条件
mTextView.setY(0);
} else {
mTextView.setY(-(-(viewByPosition.getTop()) + mTextView.getHeight()));
}
}
int j = (curPosition + 1) / 5;//除以5是因为5个一组,实际具体情况具体分析
mTextView.setText("第" + j + "组");//第一个group
mTextView.setVisibility(View.VISIBLE);
View viewByPosition = mLayoutManager.findViewByPosition(curPosition + 1 + 5);//下一个group
if (viewByPosition.getHeight() < mTextView.getHeight()) {
int i = (curPosition + 5 + 1) / 5;
mTextView.setText("第" + i + "组");
}
}
源码地址:https://github.com/PuppetZ/ScrollingTricks
备注
因个人知识有限,如有什么意见或建议,欢迎提出,共同进步!