如何将 viewPager 的方向反转为从左到右的顺序?
Posted
技术标签:
【中文标题】如何将 viewPager 的方向反转为从左到右的顺序?【英文标题】:how to reverse the direction of viewPager to left to right order? 【发布时间】:2012-11-09 11:53:15 【问题描述】:我有几个视图的 viewPager。 viewPager 的默认行为是首先显示第一个项目,然后从右向左滑动显示第二个视图,以此类推。
我想要的行为是,在显示第一个项目后,从左向右滑动将显示下一个视图从左到当前项目。
我搜索了很多聪明的方法来实现这个但没有结果.. 提前致谢。
【问题讨论】:
【参考方案1】:您为什么不反转您在视图寻呼机中查看的列表并使用setCurrentItem(int) 或setCurrentItem(int,boolean) 并在活动/片段启动时设置最后一个..
【讨论】:
但每次滑动我都必须调用 setCurrentItem?这样我会失去 viewPager 的优势,不是吗? 如果您反转您的视图列表并将当前项目设置为最后一个视图,那么您的最后一个视图将被显示.. 现在因为您已经反转了视图列表,所以最后一个视图将是第一个视图您的原始视图列表...现在用户将无法向右移动,因为您在最后一个视图中.. 用户只能向左移动以查看最后一个视图(这是您原始列表中的第二个视图),最后一个第三个视图视图(这是您原始列表中的第三个视图)等等..我想这就是您想要的.. 哎呀你是对的..我在写完后一秒钟就注意到了这一点,并试图删除我的评论,但你回答得更快..谢谢!!! 这里的问题是,当您为viewpager设置适配器时,默认情况下,它会创建OffsetLimitFragments用于“预加载”目的。然后将 currentItem 设置为最后一个,从而要求 viewpager 创建另一个 OffsetLimitFragments...找不到解决方法...【参考方案2】:当 ViewPager 附加到 View 时,您可以简单地使用 setCurrentItem()
导航到 ViewPager 中的最后一页。
【讨论】:
我想过这种方式,但我的视图列表非常动态,并且在根据滑动位置滑动时添加了视图,因此 setCurrentItem 的这种方法会使它更加复杂.. 您不需要动态添加视图;请改用 Fragments,支持库将为您处理它们的生命周期。 什么意思?我将概述我正在做的事情:在 vp(viewPager) 中,我有一个视图是 listView (层次结构中的更高级别)。刷卡会考虑被刷卡的列表项,并将额外的 listView 添加到显示下一级层次结构的 vp 中,依此类推。向后滑动会删除最后一个 listView。这很好用,但现在我将副总裁从左到右颠倒过来,我很尴尬。我正在寻找非“哺乳动物”的方式。你可以帮帮我吗?我的英语不太好,你明白我的意思吗?非常感谢您抽出宝贵时间。 我不太确定您所说的 ViewPager 和 ListView 是什么意思。我建议阅读 this android Dev Blog article about the ViewPager using Fragments、this blog post 以获得完整示例,并阅读 this question 以获得一些有见地的评论。 它是包含列表的 viewpager。我会学习你的链接,看看它是否有帮助。非常感谢!【参考方案3】: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上测试
【讨论】:
【参考方案4】:您现在可以在 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'
...
【讨论】:
以上是关于如何将 viewPager 的方向反转为从左到右的顺序?的主要内容,如果未能解决你的问题,请参考以下文章