如何在viewpager2中显示下一页的一部分?

时间:2019-12-02 17:35:52

标签: android kotlin android-viewpager2

我正在尝试使用项目装饰器和寻呼机转换器来显示下一页和上一页的部分,所有页面之间的边距相等(包括第一个项目的左边距和最后一个项目的右边距)。对于下面的项目,我仅面临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
  }

}

0 个答案:

没有答案