RecyclerView存在大量Item时,当滚到底部时快速滑到顶部
来源:互联网 发布:程序员培训全日制吗 编辑:程序博客网 时间:2024/04/30 06:23
在使用RecyclerView展示图片或者其他信息时,往往需要展示很多的Item,当滚到底部时又想回到顶部,如果一点一点的向上划去比较麻烦,而且用户体验不好。因此添加一个快速回到顶部的按钮是很有必要的,并且刚开始的时候这个按钮是隐藏的,当滑动超过超过一屏的时候才会出现,在滑动的过程中也是不会出现的。很多类似的项目都会使用到,但是如何在快速回到顶部的过程中不出现卡顿,体现的很是流畅,这点很重要。下面是我根据网上的方法自己修改的一个可以快速回到顶部的类,在此做一下备注,以便日后查看:
- FastScrollManger.java
import android.content.Context;import android.graphics.PointF;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.LinearSmoothScroller;import android.support.v7.widget.RecyclerView;import android.util.DisplayMetrics;/** * Author: aaa * Date: 2017/3/16 11:16. * 快速回到RecyclerView 的顶部,不会出现卡顿 */public class FastScrollManger extends LinearLayoutManager { public FastScrollLinearLayoutManager(Context context) { super(context); } public FastScrollLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } @Override public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) { LinearSmoothScroller linearSmoothScroller = new LinearSmoothScroller(recyclerView.getContext()) { @Override public PointF computeScrollVectorForPosition(int targetPosition) { return FastScrollLinearLayoutManager.this.computeScrollVectorForPosition(targetPosition); } //控制速度。 @Override protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { return super.calculateSpeedPerPixel(displayMetrics); } @Override protected int calculateTimeForScrolling(int dx) { if (dx > 3000) { dx = 3000; } int time = super.calculateTimeForScrolling(dx); return time; } }; linearSmoothScroller.setTargetPosition(position); startSmoothScroll(linearSmoothScroller); }}
2.使用
mRecyclerView = (RecyclerView) findViewById(R.id.activity_recyclerview); LinearLayoutManager layout = new FastScrollManager(CustomActivity.this, LinearLayoutManager.VERTICAL, false); mRecyclerView.setLayoutManager(layout);//竖直放置 ... mRecyclerView.setAdapter(mMyAdapter); mRecyclerView.addOnScrollListener(new MyRecyclerViewScrollListener());
3.控制显示与隐藏
//滑动监听 private class MyRecyclerViewScrollListener extends RecyclerView.OnScrollListener { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager(); int firstVisibleItemPosition = manager.findFirstVisibleItemPosition(); // 当不滚动时 if (newState == RecyclerView.SCROLL_STATE_IDLE) { // 判断是否滚动超过一屏 if (firstVisibleItemPosition == 0) { mImageViewRebackTop.setVisibility(View.INVISIBLE); } else { mImageViewRebackTop.setVisibility(View.VISIBLE); } } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {//拖动中 mImageViewRebackTop.setVisibility(View.INVISIBLE); } } }
4.点击回到顶部按钮的时候,回到顶部
mRecyclerView.smoothScrollToPosition(0);
1 0
- RecyclerView存在大量Item时,当滚到底部时快速滑到顶部
- Android RecyclerView 快速滑到顶部
- Android RecyclerView 快速滑到顶部
- 当滑动到顶部和底部时,实现Item的分离效果的ListView
- AbsListView、ScrollView 快速滑到顶部的背景颜色设置
- Android ListView拖(滚)动到顶部或底部时出现阴影的解决方案
- RecyclerView选择item滚动到顶部
- 当点击一个button或者是其它view时对应的item滑到顶部
- recyclerview滑动到底部时监听操作
- RecyclerView检测滑动到顶部或底部的代码示例
- Android Recyclerview判断是否已经到底部或者顶部
- 让UICollectionView滚到顶部
- android scrollView滚到底部
- recyclerview,滚到指定位置
- ios tableview是否滚到顶部和底部以及滚动的方向
- 当手机滑到页面底部时自动加载数据
- ScrollView嵌套可滑动控件(RecyclerView、ListView、GraidView等),ScrollView会自动滚到底部
- Android ScrollView对滑动的监听当手离开屏幕时的处理(向上向下滑动,滑动到顶部与底部)
- 获取网站性能指标shell脚本
- ASP.NET如何定时调用WebService服务
- 面向对象编程
- innodb_flush_method
- 面试题-----两个栈实现一个队列
- RecyclerView存在大量Item时,当滚到底部时快速滑到顶部
- Qt Creator 管理多工程的实践
- 20170314
- house robber
- iPhone屏幕尺寸、分辨率及适配
- JAVA Agent 简析及开发示例
- GCC主要数据结构之cpp_token
- 推荐系统_电影推荐
- Oracle 12c – Rename Pluggable Database