【发布时间】:2015-09-23 19:13:13
【问题描述】:
这更像是一个通用问题,但经过大量搜索和尝试后,我无法理解为什么这很难实现。 This 是我能找到但仍然无法实施的最接近的答案。
具体来说,我将 RecyclerView 与 GridLayoutManager 一起使用。我想要的只是平滑滚动的网格布局(如默认的画廊应用程序),没什么花哨的,但网格布局管理器的默认实现以“生涩”的方式滚动视图。我尝试实现上述链接中的方法,但没有成功。
我也尝试实现 LinearSmoothScroller 但我不确定如何实现 computeScrollVectorForPosition 方法。 computeScrollVectorForPosition 上的Google's documentation 字面上有0 个单词。
我找到了this 3 part tutorial,但帮助甚微。所以,我想问的是:是否有某种模板代码可以在 LinearSmoothScroller 中实现,或者通过扩展 RecyclerView.SmoothScroller 来实现平滑滚动?即使代码取决于网格布局中每行的项目数和项目数,也必须有一些方法可以轻松完成。我在这里错过了什么吗?
【问题讨论】:
-
“我在这里遗漏了什么吗?” -- 或许您应该使用 Traceview、
StrictMode等工具来确定您现有代码为何“生涩”。 -
@commonsWare 所以你的意思是 GridLayoutManager 的默认实现应该平滑地滚动 gridview ?对不起,如果我听起来很菜鸟,我对 Android 编程很陌生。
-
"所以你的意思是 GridLayoutManager 的默认实现应该平滑地滚动 gridview ?" ——是的,至少对于我对“顺利”的定义。 Android 中“生涩”滚动的典型来源是应用程序在主应用程序线程更新 UI 上花费了太多时间。对于
RecyclerView,这意味着在onBindViewHolder()或onCreateViewHolder()中花费太多时间。这些每个都需要在亚毫秒时间内返回,这意味着您不能在其中执行磁盘 I/O 或网络 I/O。 -
@CommonsWare 谢谢你的回答,我想我找到了问题所在。我在 onBindViewHolder() 上使用
holder.photo.setImageBitmap(BitmapFactory.decodeFile(itemList.get(position).getAbsolutePath()));,每个图像文件大约 100kb,列表中有十几个图像。我会尝试更好地实现它。
标签: android android-recyclerview smooth-scrolling gridlayoutmanager