当用户将手从屏幕上移开时,如何使 Recycler View 滚动缓慢而流畅?
Posted
技术标签:
【中文标题】当用户将手从屏幕上移开时,如何使 Recycler View 滚动缓慢而流畅?【英文标题】:How to make a Recycler View scroll slow and smooth when the user takes hands off the screen? 【发布时间】:2021-10-18 20:07:21 【问题描述】:这就是我快速滚动时当前的实现方式。
在第二个中,回收站视图中的所有项目都显示到最后。我想要实现的是如下所示(现场演示:Play 商店中的回收站视图),
即使我们快速滚动,它也会显示 1 或 2 个项目,因此感觉很自然。我怎样才能使回收器视图以这种方式运行?
代码:
适配器
class CustomAdapter(private val mList: List<ItemsViewModel>) : RecyclerView.Adapter<CustomAdapter.ViewHolder>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.card_view_design, parent, false)
return ViewHolder(view)
override fun onBindViewHolder(holder: ViewHolder, position: Int)
override fun getItemCount(): Int
return mList.size
class ViewHolder(ItemView: View) : RecyclerView.ViewHolder(ItemView)
val imageView: ImageView = itemView.findViewById(R.id.imageview)
val textView: TextView = itemView.findViewById(R.id.textView)
实施
val recyclerview = findViewById<RecyclerView>(R.id.recyclerview)
recyclerview.layoutManager = LinearLayoutManager(requireContext(), RecyclerView.HORIZONTAL, false)
val data = ArrayList<ItemsViewModel>()
val adapter = CustomAdapter(data)
recyclerview.adapter = adapter
【问题讨论】:
【参考方案1】:当RecyclerView
水平滚动时,scrollHorizontallyBy()
会被多次调用,dx值可以根据手指的fling(push)值使滚动表现得平滑而真实。
垂直RecyclerView
相同,scrollVerticallyBy()
使用不同的 dy 值调用。
因此,您可以操纵此 dx
值以获得所需的行为;在您的情况下,您需要获得较小的 dx
值。
您会想到一个固定的dx
值,但这并不自然;相反,您可以将其除以固定数量以缩小相同的 dx 值。
这里我使用了一个任意值,您可以根据需要对其进行操作。
因此,您需要在使用水平 recyclerView 时使用自定义 LinearLayoutManager
并覆盖 scrollHorizontallyBy()
:
class MyLinearLayoutManager(context: Context?, orientation: Int, reverseLayout: Boolean) :
LinearLayoutManager(context, orientation, reverseLayout)
override fun scrollHorizontallyBy(
dx: Int,
recycler: RecyclerView.Recycler?,
state: RecyclerView.State?
): Int
var newDx = (dx / 1.2).toInt() // 1.2 is an arbitrary value
if (newDx == 0 && dx != 0) // To have no 0 values (Optionally)
newDx = 1
return super.scrollHorizontallyBy(newDx, recycler, state)
【讨论】:
以上是关于当用户将手从屏幕上移开时,如何使 Recycler View 滚动缓慢而流畅?的主要内容,如果未能解决你的问题,请参考以下文章