在用RecylerView展示数据的时候,在右下方显示一个悬浮的button,它的功能是:
在上拉时隐藏button,下拉时显示button,点击这个button回到顶部。如图:
布局如下:
<!--不加上CoordinatorLayout,FloatActionButton不会显示-->
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:id="@+id/recyler_view"
android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/go_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
app:fabSize="mini"
android:layout_margin="@dimen/fab_margin"
android:src="@mipmap/up"
app:backgroundTint="#FF9800"
/>
</android.support.design.widget.CoordinatorLayout>
注意要在外面套上CoordinatorLayout,否则FloatingActionButton不会显示。
mFloatingActionButton = view.findViewById(R.id.go_up);
为Recylerview添加滑动侦听,上拉【手指 自 下 往 上】时隐藏button,下滑【手指 由 上 至下】时显示button
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
if (lastItemPosition + 1 == lm.getItemCount()) {
//Log.d(TAG, "我在加载更多");
mCurrentStart++;
loadMore();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastItemPosition = lm.findLastVisibleItemPosition();
if (dy > 0 && mFloatingActionButton.getVisibility() == VISIBLE) {
mFloatingActionButton.hide();
} else if (dy < 0 && mFloatingActionButton.getVisibility() != VISIBLE) {
mFloatingActionButton.show();
}
}
});
重点是onScrolled方法里,当上拉【手指自下往上】时,dy>0,此时如果button可见就让它隐藏,
下滑时,dy<0,此时如果button不可见,就让它显示。
到这里已经可以实现,上拉隐藏,下滑显示了。
接下来是 点击button,回到顶部
很简单:
mFloatingActionButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mRecyclerView.smoothScrollToPosition(0); //滑动到第一项
}
});
smoothScrollToPositoin(),是个滑动的过程,不会很突兀,到这目的就已经达到啦.....