我是Kotlin的Android新手。
我有recylerview,项目数量不限。但是我只想显示每个视图6个项目。我在项目中使用约束布局来绑定数据。我使用了 setOnTouchListener 并使用了拖动功能。如果我的阻力强度很短并且方向在左侧,那么我通过了2;如果方向是右侧,我通过了-2。如果我的拖动强度很长并且方向在左侧,那么我在像素强度 smoothScrollBy 函数中通过了6,而在方向正确的情况下则通过了-6。我正在使用 smoothScrollBy ,项目滚动良好,但如果我能快速拖动,则将第一和最后一个项目切到边缘。然后,我使用正常的 scrollby 正常工作。您能为我提出一些解决方案的建议吗?
适配器文件
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val itemView: View =
LayoutInflater.from(parent.context)
.inflate(R.layout.calender_item_layout, parent, false)
itemView.layoutParams.width = Resources.getSystem().displayMetrics.widthPixels / 6
return ViewHolder(itemView)
}
CustomeRecyclerView
class CustomRecyclerView(context: Context, attrs: AttributeSet?) :
RecyclerView(context, attrs) {
init{
layoutManager = LinearLayoutManager(context).apply {
orientation = LinearLayoutManager.HORIZONTAL
stackFromEnd = true
}
setOnTouchListener(object : OnSwipeTouchListener() {
// pass 2 or 6 based on drag intensity
// 2 or -2 for short drag 6 and -6 for long drag
post { scrollItem(value) }
}
}
fun scrollItem(value: Int) {
smoothScrollBy(inpixel(value), 0)
}
private fun inpixel(offset: Int): Int {
val dim = Resources.getSystem().displayMetrics
return (dim.widthPixels / 6) * offset
}
}
谢谢