RecyclerView滚动到指定位置的一种姿势。

简介: 其实这个问题没有什么难度了,下面的两种方式都可以实现,但是效果可能并不是我想要的。recyclerView.scrollToPosition(position);recyclerView.smoothScrollToPosition(position);因为我的效果是想要指定的position滑动到窗口最顶部,但实际效果却不是这样的。

其实这个问题没有什么难度了,下面的两种方式都可以实现,但是效果可能并不是我想要的。

recyclerView.scrollToPosition(position);
recyclerView.smoothScrollToPosition(position);

因为我的效果是想要指定的position滑动到窗口最顶部,但实际效果却不是这样的。

百度

老规度,借助一下性无能的百度。
答案出来了:


  /**
     * RecyclerView 移动到当前位置,
     *
     * @param manager  设置RecyclerView对应的manager
     * @param n  要跳转的位置
     */
    public static void MoveToPosition(LinearLayoutManager manager, int n) {
        manager.scrollToPositionWithOffset(n, 0);
        manager.setStackFromEnd(true);
    }

也有这样的:

final LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
int fir = manager.findFirstVisibleItemPosition();
int end = manager.findLastVisibleItemPosition();
final int p = Integer.parseInt(string);
if (p <= fir) {
      recyclerView.scrollToPosition(p);
} else if (p <= end) {   
    int top = recyclerView.getChildAt(p - fir).getTop(); 
    recyclerView.scrollBy(0, top);
} else {    
    recyclerView.scrollToPosition(p);    //先让当前view滚动到列表内
    move = true;
}
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
{    
    @Override  
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
        super.onScrolled(recyclerView, dx, dy);  
              if (move) {          
            move = false;     
         int n = p - manager.findFirstVisibleItemPosition(); 
if (n >= 0 && n < recyclerView.getChildCount()) {    
          recyclerView.scrollBy(0, recyclerView.getChildAt(n).getTop()); //滚动到顶部
      }    
  } 
 }
});

这个代码很多了,看看脑袋都大喽。

我的方法

    LinearSmoothScroller smoothScroller = new LinearSmoothScroller(this){

        @Override
        protected int getVerticalSnapPreference() {
            return LinearSmoothScroller.SNAP_TO_START;
        }
    };

    recyclerView.getLayoutManager().startSmoothScroll(smoothScroller);

关键在于 getVerticalSnapPreference()的返回值,共有三种:

 public static final int SNAP_TO_START = -1; 
 public static final int SNAP_TO_END = 1;
 public static final int SNAP_TO_ANY = 0;

SNAP_TO_START使子视图的左侧或顶部与父视图的左侧或顶部对齐。
SNAP_TO_END使子视图的右侧或底部与父视图的右侧面或底部对齐。
SNAP_TO_ANY根据子视图的当前位置与父布局的关系,决定子视图是否从头到尾跟随。
比如,如果子视图实际位于RecyclerView的左侧,SNAP_TO_ANY和SNAP_TO_START是没有
差别的。
默认值就是SNAP_TO_ANY啦。
具体什么效果大家可以试试啦,本文只是抛砖引玉。
结束,谢谢~~

目录
相关文章
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
Element UI之el-tabs的样式修改字体颜色、下划线、选中/未选中
4383 0
|
安全 生物认证 网络安全
windows10无法设置默认保存位置怎么办?显示错误代码0x80070002怎么解决?
Win10系统下载文件时,默认会保存在特定位置,但用户可自行修改。若更改后仍无效,可通过删除目标磁盘中的特定文件夹、修改注册表权限、“干净启动”排除干扰软件或使用第三方修复工具等方式解决此问题。
1855 0
|
供应链 监控 安全
网络安全中的零信任架构:从概念到部署
网络安全中的零信任架构:从概念到部署
1560 75
|
运维 监控 BI
卓越架构之FinOps最佳实践
本文探讨了云成本管理的趋势和FinOps的最佳实践。随着云计算的普及,传统的IT管理模式已无法适应按需使用和按量付费的新模式,导致企业面临资源浪费和成本失控的风险。FinOps作为一种管理理念,强调运维、财务和技术团队的合作,通过数据驱动和业务价值驱动的方式优化云成本。文章介绍了FinOps的核心挑战、最佳实践及技术工具的应用,帮助企业有效管理和优化云成本,实现降本增效。
|
敏捷开发 数据可视化 搜索推荐
项目管理看板:项目进度的清晰导航
项目管理看板是一种可视化的任务管理工具,起源于日本丰田公司的精益生产方法。它通过分阶段展示任务状态,帮助团队实时跟踪进展,提高协作效率。看板广泛应用于软件开发、营销、产品开发和客户服务等领域,核心功能包括可视化任务管理、实时跟踪、提高协作、标识阻塞问题和数据分析。未来,看板将更加智能化和集成化,支持更多自定义功能。
|
前端开发 JavaScript API
wangEditor富文本编辑器的调用开发实录(v5版本、获取HTML内容、上传图片、隐藏上传视频)
wangEditor富文本编辑器的调用开发实录(v5版本、获取HTML内容、上传图片、隐藏上传视频)
2633 0
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
1148 12
|
搜索推荐 安全 数据安全/隐私保护
SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
【8月更文挑战第9天】SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
SearXNG与LLM强强联合:打造用户隐私保护的智能搜索解答流程,隐私无忧,搜索无忧
|
SQL 安全 关系型数据库
Kingbase(人大金仓数据库)(总结全网精华,虚拟机:从安装到操作数据库一条龙)
KingbaseES 是一款由中国人大金仓信息技术股份有限公司自主研发的通用关系型数据库管理系统(RDBMS),专为中国市场设计,广泛应用于政府、金融、能源、电信等多个关键行业。它是国产数据库的代表之一,以其高安全性、高可用性和高性能著称,符合中国信息技术领域的自主可控要求。以下是关于KingbaseES的一些关键特点和功能:
3726 1
|
数据安全/隐私保护 Python Windows
三种方法,Python轻松提取PDF中全部图片
三种方法,Python轻松提取PDF中全部图片
841 3

热门文章

最新文章