RecyclerView滑动到指定位置,并置顶
一般我们用 mRecycleview.smoothScrollToPosition(0)滑动到顶部,具有滚动效果,但是如果我们想滚动到任意指定位置,那么smoothScrollToPosition()就不能保证所指定item位于屏幕顶部,那么一下提供下我解决的方法:
1.第一种方法
此方法能实现指定位置位于屏幕顶部,但是不具有平滑滚动视觉效果:
if (position != -1) {mRecycleview.scrollToPosition(position);LinearLayoutManager mLayoutManager =(LinearLayoutManager) mRecycleview.getLayoutManager();这里的LinearLayoutManager对象只能是动态获取,不能用全局的。
mLayoutManager.scrollToPositionWithOffset(position, 0); }
2.第二种方法
此方法能实现指定位置位于屏幕顶部,具有平滑滚动视觉效果:
首先获取第一个可见位置和最后一个可见位置,分三种情况:
1.如果如果跳转位置在第一个可见位置之前,就smoothScrollToPosition()可以直接跳转;
2.如果跳转位置在第一个可见项之后,最后一个可见项之前smoothScrollToPosition()不会滚动,此时调用smoothScrollBy来滑动到指定位置;
3.如果要跳转的位置在最后可见项之后,则先调用smoothScrollToPosition()将要跳转的位置滚动到可见位置,在addOnScrollListener()里通过onScrollStateChanged控制,调用smoothMoveToPosition,再次执行判断;
//目标项是否在最后一个可见项之后private boolean mShouldScroll;//记录目标项位置private int mToPosition; /** * 滑动到指定位置 */ private void smoothMoveToPosition(RecyclerView mRecyclerView, final int position) { // 第一个可见位置 int firstItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(0)); // 最后一个可见位置 int lastItem = mRecyclerView.getChildLayoutPosition(mRecyclerView.getChildAt(mRecyclerView.getChildCount() - 1)); if (position < firstItem) { // 第一种可能:跳转位置在第一个可见位置之前 mRecyclerView.smoothScrollToPosition(position); } else if (position <= lastItem) { // 第二种可能:跳转位置在第一个可见位置之后 int movePosition = position - firstItem; if (movePosition >= 0 && movePosition < mRecyclerView.getChildCount()) { int top = mRecyclerView.getChildAt(movePosition).getTop(); mRecyclerView.smoothScrollBy(0, top); } } else { // 第三种可能:跳转位置在最后可见项之后 mRecyclerView.smoothScrollToPosition(position); mToPosition = position; mShouldScroll = true; } }
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); if (mShouldScroll) { mShouldScroll = false; smoothMoveToPosition(irc, mToPosition); } } });
if (position != -1) {smoothMoveToPosition(irc,position);}else { smoothMoveToPosition(irc,position+1); }
改文章出自:https://blog.csdn.net/shanshan_1117/article/details/78780137特此感谢!
转载于:https://www.cnblogs.com/qynprime/p/9284841.html
RecyclerView滑动到指定位置,并置顶相关推荐
- 用startSmoothScroll实现RecyclerView滚动到指定位置并置顶,含有动画。
RecyclerView滚动到指定位置并置顶 RecyclerView本身提供了几个定位的方法,除了手动滑动的scrollTo,smootScrollTo和scrollBy,smoothScrollB ...
- Android RecyclerView 滑动到指定位置 RecyclerView 滑动到顶部
志在巅峰的攀登者,不会陶醉在沿途的某个脚印之中,在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天.每周,都会留下一些脚印,就是这些创作的 ...
- vue 监听滚动事件之菜单滚动吸顶点击滑动到指定位置点击高亮
###菜单滚动吸顶效果: ###html: <section class="switchModule" id="switchModule">< ...
- react native ScrollView实现滑动锚定,滑动到指定位置
实现ScrollView滑动视图组件滑动到指定位置,实现tab与具体位置相锚定 给需要锚定的组件加上onLayout属性 //event.nativeEvent.layout.x是水平方向值,even ...
- zblog php 指定分类,zblogPHP如何调用指定分类的置顶文章
站长圈子里可真是人人都是产品经理啊,各种奇葩的需求都会碰到,今天有个老哥就咨询我zblogphp程序如何调用指定分类的置顶文章,也不知道是应用在他网站的哪个模块区域了. 扯远了说正事,直接上代码{fo ...
- RecyclerView滚动到指定位置
滚动到指定位置 recyclerView.scrollToPosition(position); 平滑滚动到指定位置 recyclerView.smoothScrollToPosition(posit ...
- 【AHK】鼠标调整窗口大小/移动窗口位置/窗口置顶/透明度
通过AHK,设置窗体大小或位置,首先是两种鼠标调节窗体方案,后面是快捷键,注意修改快捷键的位置有两个,仿照Ubuntu调节窗体的快捷键 Alt+F7.Alt+F8,个人感觉比要按着ALT调节的小工具要 ...
- Vue 点击导航栏滑动到指定位置
效果图: assignBlock.gif 方法1: <template><div class="hold"><!-- 跳转到指定模块 -->&l ...
- vue+element制作音乐播放器播放进度条bug(鼠标拖拽slider滑块滑动到指定位置无效)
最开始bug还没解决时的效果图 bug解决后的效果图 项目场景: 想自己做一个基于vue仿网易云音乐的音乐网站,在制作播放器的时候用到了element ui里面的slider组件,制作完成后发现使用c ...
最新文章
- mysql另外加外键约束怎么写_mysql外键约束怎么写
- python进程socket通信_Python Socket TCP双端聊天功能实现过程详解
- java maven项目构建ssh工程 父工程与子模块的拆分与聚合
- 【算法基础】数据结构导论第六章-查找.pptx
- python里的shell是什么_python中的shell操作
- 如何使用 BenchmarkDotNet 对 C# 代码进行基准测试
- python——文本简单可逆加密
- shortcut switch in terminal start pos end pos
- mysql的常见命令与语法规范
- java2实用教程 第6版(课后习题总结)
- 同济大学《高等数学》上册答案
- 超市管理系统软件测试用例图,《天天超市管理系统》所有模块测试用例集.doc...
- 什么是浏览器指纹识别
- 解决微信屏蔽淘宝链接的方法
- 针孔相机模型,鱼眼相机模型,单目标定
- 第九周项目六 委派任务
- 2WD远程控制小车——云端设计
- 在微信小程序开发中遇见的bug及解决方案
- Linux USB基础之端点(二)
- 《VC++深入详解》第三章