我正在尝试使用项目装饰器和寻呼机转换器来显示下一页和上一页的部分,所有页面之间的边距相等(包括第一个项目的左边距和最后一个项目的右边距)。对于下面的项目,我仅面临2个重要问题:1-落后,2-最后一个项目边距空间不均匀
ItemDecorator
class DashboardRelationItemDecorator(context: Context) : RecyclerView.ItemDecoration() {
private val padding = context.resources.getDimensionPixelOffset(R.dimen.margin_1x)
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
outRect.right = -padding*2
outRect.left = -padding*2
}
}
PageTransformer。绑定标记,如果项目是第一个,则为0;如果项目是最后一个,则为2;如果介于两者之间,则为1。
class DashboardRelationPageTransformer(context: Context) : ViewPager2.PageTransformer {
private val padding = context.resources.getDimensionPixelOffset(R.dimen.margin_1x)
override fun transformPage(page: View, p: Float) {
val bound = page.tag as Int
val ll = page.layoutParams as ViewGroup.MarginLayoutParams
val ofset = 1 - p.absoluteValue
if (bound == 0) {
val toInt = (padding * 4 * ofset).toInt()
page.setPadding(padding * 3, 0, toInt + padding / 2, 0)
} else if (bound == 2) {
val toInt = (padding * 4 * ofset).toInt()
page.setPadding(toInt + padding / 2, 0, padding * 3, 0)
} else {
val toInt = (padding * 4 * ofset).toInt()
page.setPadding(toInt + padding / 2, 0, toInt + padding / 2, 0)
}
page.layoutParams = ll
}
}