5

我有几个视图的 viewPager。viewPager 的默认行为是首先显示第一个项目,然后从右向左滑动将第二个视图显示到当前视图的右侧,依此类推。

我想要的行为是在显示第一个项目后,从左向右滑动将显示当前项目 左侧的下一个视图。

我搜索了很多聪明的方法来实现这个但没有结果..
提前谢谢。

4

4 回答 4

8

为什么不反转您在视图寻呼机中查看的列表并使用setCurrentItem(int)setCurrentItem(int,boolean)并在活动/片段启动时设置最后一个..

于 2012-11-21T09:12:19.373 回答
3

当 ViewPager 附加到 View 时,您可以简单地使用setCurrentItem()它导航到 ViewPager 中的最后一页。

于 2012-11-21T09:12:27.230 回答
2

ViewPager2 的解决方案

我正在寻找一种方法来反转 viewpager2 并想出了这个。这是一个肮脏的黑客,但它有效

这个想法是水平镜像viewpager,然后将每个页面镜像回来

var ViewPager2.isReversedDirection: Boolean
get() = scaleX == -1f
set(value) {
    if (value) {
        scaleX = -1f  //  mirror viewpager

        val listener = object : RecyclerView.OnChildAttachStateChangeListener {
            override fun onChildViewDetachedFromWindow(view: View) = Unit

            override fun onChildViewAttachedToWindow(view: View) {
                view.scaleX = -1f  //  mirror the page back when it was attached
            }
        }

        val recyclerView = getChildAt(0) as RecyclerView
        recyclerView.addOnChildAttachStateChangeListener(listener)
    }
}

由于依赖viewpager内部实现,所以在androidx.viewpager2:viewpager2:1.0.0上测试

于 2021-11-20T11:13:10.113 回答
0

您现在可以在 Recyclerview 中水平显示项目。

有一个选项可以将 recyclerview 项目显示为相反的顺序。

RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, true)); // last parameter is isReverse

如果你想显示像 ViewPager 分页这样的 RecyclerView 项目,你应该使用这个库:

https://github.com/lsjwzh/RecyclerViewPager

此代码将 RecyclerView 显示为 Reverse Order ViewPager。

这是代码:

RecyclerViewPager recyclerViewPager = findViewById(R.id.recyclerViewPager);
recyclerViewPager.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, true));


repositories {
    ...
    maven { url "https://jitpack.io" }
    ...
}

dependencies {
    ...
    compile 'com.github.lsjwzh.RecyclerViewPager:lib:v1.1.2@aar'
    ...
}
于 2017-10-28T14:48:27.573 回答