在ViewPager上同时多个页面

使用ViewPager时,是否有可能同时显示两页? 我不是在寻找一个边缘效应,而是在同一时间两个完整的页面。

提前致谢。

请查看相应的PagerAdapter中的getPageWidth方法。 覆盖它并返回例如0.8f ,使所有的子页面只占用ViewPager宽度的80%。

更多信息: http : //developer.android.com/reference/android/support/v4/view/PagerAdapter.html#getPageWidth(int)

查看我的更新的答案在这里: ViewPager可以在每个页面有多个视图?

通过为ViewPager指定负边距,我发现了一个更简单的解决scheme。 我已经在GitHub上创build了MultiViewPager项目,你可能想看看:

https://github.com/Pixplicity/MultiViewPager

虽然这个问题特别要求没有边缘效应的解决scheme,但是这里的一些答案提出了CommonsWare的解决方法,比如kaw的build议。

使用特定的解决scheme,触摸处理和硬件加速存在各种问题。 在我看来,更简单和更优雅的解决scheme是为ViewPager指定负边距:

 ViewPager.setPageMargin( getResources().getDimensionPixelOffset(R.dimen.viewpager_margin)); 

然后我在我的dimens.xml指定了这个维度:

 <dimen name="viewpager_margin">-64dp</dimen> 

为了弥补重叠的页面,每个页面的内容视图都有相反的余量:

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

再次在dimens.xml

 <dimen name="viewpager_margin_fix">32dp</dimen> 

(请注意, viewpager_margin_fix尺寸是绝对viewpager_margin尺寸的一半。)

我们在荷兰的报纸应用De Telegraaf Krant中实现了这个function

Te Telegraaf Krant的电话例子Tablet示例

您必须重写viewpager的Adapter上的getPageWidth()方法。 例如:

 @Override public float getPageWidth(int position) { return 0.9f; } 

尝试在你的适配器的代码,然后你会明白。

看到这个博客条目 。
PagerContainer技术解决了我的问题。

编辑:
我find了同样的答案。
如何从Gallery迁移到Horizo​​ntalScrollView&ViewPager?

您可以通过在PagerAdapter类中使用getPageWidth来解决此问题。

确保你的JAR是否是最新的 。由于以前的ViewPager不支持同时多个页面。

public float getPageWidth(){

返回0.4f;(你可以select它。对于每页的全屏,你应该给1f)}

创build你的布局文件:my_layout.xml:

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <FrameLayout android:id="@+id/pager_container" android:layout_width="match_parent" android:layout_height="240dp" android:clipChildren="false"> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="200dp" android:clipToPadding="false" android:layout_height="200dp" android:layout_marginLeft="70dp" android:layout_marginRight="70dp" android:layout_gravity="center" /> </FrameLayout> </layout> 

viewpager就像你想要的页面一样小。 使用android:clipToPadding =“false”时,页面外部的页面也可见。 但现在拖到viewpager外面没有任何效果这可以通过从pager-container中select触摸并将它们传递给传呼机来弥补:

 MyLayoutBinding binding = DataBindingUtil.<MyLayoutBinding>inflate(layoutInflater, R.layout.my_layout, parent, false) binding.pager.setOffscreenPageLimit(3); binding.pager.setPageMargin(15); binding.pagerContainer.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return chatCollectionLayoutBinding.pager.onTouchEvent(event); } }); 

它可以不在Viewpager的项目布局中。 假设你一次只需要两页。

这是项目布局 (photo_slider_item.xml):

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/photosSliderItem"> <ImageView android:id="@id/photoBox1" style="@style/photoBox"/> <ImageView android:id="@id/photoBox2" style="@style/photoBox"/> </LinearLayout> 

在您的PagerAdapter中:

 @Override public View instantiateItem(ViewGroup container, int position){ View sliderItem = LayoutInflater.from(container.getContext()).inflate(photo_slider_item, container, false); ImageView photoBox1 = (ImageView) sliderItem.findViewById(R.id.photoBox1); ImageView photoBox2 = (ImageView) sliderItem.findViewById(R.id.photoBox2); photoBox1.setImageResource(photosIds[position]); if(position < photosIds.length-1){ photoBox2.setImageResource(photosIds[position+1]); } else {photoBox2.setImageResource(photosIds[0]);} container.addView(sliderItem); return sliderItem; } 

我不认为这是可能的视图寻呼机的限制。 它只允许用户一次查看第1页。 你也许可以通过使用片段来解决问题,并且使用两个ViewPager片段并使用button来找出想要实现的页面,但是代码可能会变得非常复杂。

你可以尝试一些像ViewFlipper – 你可以做更多的定制(包括animation)。

希望这可以帮助。