当前位置: 首页 > 知识库问答 >
问题:

Android ViewPager2 setPageMargin 未解析

瞿博易
2023-03-14

我想使用View Pager2实现轮播,并预览左右页面,如下所示:

最初,我使用的是支持的视图 pager1。现在我认为它已被删除

    viewPagerhost.setPageMargin(20);

任何想法,我们如何才能实现这个使用视图寻呼机2

共有3个答案

仲孙默
2023-03-14

我使用MJ Studio的方法创建了我的自定义PageTransformer,该方法还更改了页边距,如下所示:

class OffsetPageTransformer(
    @Px private val offsetPx: Int,
    @Px private val pageMarginPx: Int
) : ViewPager2.PageTransformer {

    override fun transformPage(page: View, position: Float) {
        val viewPager = requireViewPager(page)
        val offset = position * -(2 * offsetPx + pageMarginPx)
        val totalMargin = offsetPx + pageMarginPx

        if (viewPager.orientation == ViewPager2.ORIENTATION_HORIZONTAL) {
            page.updateLayoutParams<ViewGroup.MarginLayoutParams> {
                marginStart = totalMargin
                marginEnd = totalMargin
            }

            page.translationX = if (ViewCompat.getLayoutDirection(viewPager) == ViewCompat.LAYOUT_DIRECTION_RTL) {
                -offset
            } else {
                offset
            }
        } else {
            page.updateLayoutParams<ViewGroup.MarginLayoutParams> {
                topMargin = totalMargin
                bottomMargin = totalMargin
            }

            page.translationY = offset
        }
    }

    private fun requireViewPager(page: View): ViewPager2 {
        val parent = page.parent
        val parentParent = parent.parent
        if (parent is RecyclerView && parentParent is ViewPager2) {
            return parentParent
        }
        throw IllegalStateException(
            "Expected the page view to be managed by a ViewPager2 instance."
        )
    }
}

这样,您只需调用:

viewPager.setPageTransformer(OffsetPageTransformer(offsetPx, pageMarginPx))
全宪
2023-03-14

现在我们需要在Version 1.0.0-alpha05中使用setPageTransex()

功能

  • ItemDecorator采用了与RecyclerView一致的行为
  • 引入了MarginPageTransformer以提供在页面之间创建空间的能力(页面插入之外)
  • <code>复合变压器</code>的引入提供了组合多个变压器的能力

示例代码

myViewPager2.setPageTransformer(new MarginPageTransformer(1500));

如果您想使用View Pager2实现Carousel,请查看我之前的回答

冯皓
2023-03-14

MarginPageTransformer无法满足您的需求。

您必须使用自定义setPageTrarnsformer。

这是我的扩展方法。

你可以在这篇文章中查看详情

fun ViewPager2.setShowSideItems(pageMarginPx : Int, offsetPx : Int) {

    clipToPadding = false
    clipChildren = false
    offscreenPageLimit = 3

    setPageTransformer { page, position ->

        val offset = position * -(2 * offsetPx + pageMarginPx)
        if (this.orientation == ViewPager2.ORIENTATION_HORIZONTAL) {
            if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL) {
                page.translationX = -offset
            } else {
                page.translationX = offset
            }
        } else {
            page.translationY = offset
        }
    }

}

使用您的用例设置pageMarginPx和offsetPx。

<resources>
    <dimen name="pageMargin">20dp</dimen>
    <dimen name="pagerOffset">30dp</dimen>
    <dimen name="pageMarginAndoffset">50dp</dimen>
</resources>

在xml中设置布局项的边距。

喜欢这个

    <androidx.cardview.widget.CardView
            app:cardCornerRadius="12dp"

            android:layout_marginTop="16dp"
            android:layout_marginBottom="16dp"

            android:layout_marginLeft="@dimen/pageMarginAndoffset"
            android:layout_marginRight="@dimen/pageMarginAndoffset"

            android:layout_width="match_parent"
            android:layout_height="match_parent">
 类似资料:
  • 好吧,所以我完全被这个DNS配置卡住了。以下是配料: null 我显然搞错了。有人能看出我哪里出了问题吗?

  • 我有以下log4j2配置 当我试图通过slf4j获取记录器时 我正在Tomcat 7.0.4中运行应用程序,并使用http://logging.apache.org/log4j/2.x/manual/lookups.html建议的语法。我尝试使用$${web:rootdir}(带有2个$标记),结果删除了其中一个$-s,但查找仍未成功。事实上,其他的查找都没有成功(例如环境变量)。Log4j版本为

  • 我正在Android Studio中尝试Kotlin和Kotlin Android扩展。我在Ubuntu 14.04上的Android Studio v1.5.1和OS X El Capitan上的Android Studio v1.5.1中都进行了尝试,得到了相同的结果。 下面是我正在做的事情: null 然后进入生成的content_main.xml文件,并为“hello World!”添加一

  • 我遇到了一个错误 导入语句如下所示 Kotlin版本:1.1.51 提前致谢:)

  • 问题演示 我的任务是创建一个动态Web项目,该项目扫描来自服务器的文档,通过我的程序并将图片从文本中拆分。我需要OpenCV库。我的代码在eclipse中运行良好,工作良好。现在,我需要将库作为全局模块加载到jboss中,而不是在eclipse中,以便服务器始终知道需要加载哪些库。我所做的一切都是这个链接描述的: 有人知道为什么这是个问题吗?是否存在验证问题?Eclipse在将一个新类放入open