Android ViewPager上同时有多个页面
使用Android ViewPager上同时有多个页面,android,android-viewpager,Android,Android Viewpager,使用ViewPager时,是否有可能同时显示两个页面?我不是在寻找边缘效果,而是同时寻找两个完整的页面。我认为这是不可能的,因为查看页面的局限性。它只允许用户一次查看第1页。通过使用片段,您可能能够解决一些问题,并且并排使用2个ViewPager片段,并使用按钮来解决您想要实现的页面翻转,但是代码可能会变得非常复杂 您可以尝试像ViewFlipper这样的东西,在这里您可以进行更多的自定义(包括动画) 希望这有帮助 请查看相应的PagerAdapter中的getPageWidth方法。覆盖它并返
ViewPager
时,是否有可能同时显示两个页面?我不是在寻找边缘效果,而是同时寻找两个完整的页面。我认为这是不可能的,因为查看页面的局限性。它只允许用户一次查看第1页。通过使用片段,您可能能够解决一些问题,并且并排使用2个ViewPager片段,并使用按钮来解决您想要实现的页面翻转,但是代码可能会变得非常复杂
您可以尝试像ViewFlipper这样的东西,在这里您可以进行更多的自定义(包括动画)
希望这有帮助 请查看相应的
PagerAdapter
中的getPageWidth
方法。覆盖它并返回,例如0.8f
,使所有子页面仅覆盖ViewPager宽度的80%
更多信息:
请参见。页面容器技术解决了我的问题。
编辑:
我找到了同样的答案。
您可以通过在PagerAdapter类中使用getPageWidth来解决此问题 确保您的JAR是否是最新的。因为以前的ViewPager不支持同时显示多个页面 公共浮点getPageWidth(){ 返回0.4f;(您可以选择它。对于每页的全屏,您应该给出1f)
}在这里查看我的最新答案: 我发现,通过为ViewPager指定负边距,可能是一个更简单的解决方案。我在GitHub上创建了MultiViewPager项目,您可能想看看: 虽然这个问题特别要求一个没有边缘效应的解决方案,但这里的一些答案提出了Commonware的解决方案,例如kaw的建议 该特定解决方案在触摸处理和硬件加速方面存在各种问题。在我看来,一个更简单、更优雅的解决方案是为ViewPager指定负边距:
ViewPager.setPageMargin(
getResources().getDimensionPixelOffset(R.dimen.viewpager_margin));
然后,我在我的dimens.xml
中指定了这个维度:
<dimen name="viewpager_margin">-64dp</dimen>
<dimen name="viewpager_margin_fix">32dp</dimen>
再次在dimens.xml
中:
<dimen name="viewpager_margin">-64dp</dimen>
<dimen name="viewpager_margin_fix">32dp</dimen>
32dp
(请注意,viewpager\u margin\u fix
维度是绝对viewpager\u margin
维度的一半。)
我们实施了以下措施:
您必须覆盖viewpager适配器上的
getPageWidth()
方法。例如:
@Override
public float getPageWidth(int position) {
return 0.9f;
}
在适配器中尝试该代码,您就会明白。创建布局文件: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之外没有任何效果。可以通过从寻呼机容器中拾取触摸并将其传递到寻呼机来解决此问题:
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);
}
});
MyLayoutBinding=DataBindingUtil.inflate(LayoutFlater,R.layout.my_layout,parent,false)
绑定.pager.setOffscreenPageLimit(3);
装订页边距设置页边距(15);
binding.pagerContainer.setOnTouchListener(新视图.OnTouchListener()){
@凌驾
公共布尔onTouch(视图v,运动事件){
返回chatCollectionLayoutBinding.pager.onTouchEvent(事件);
}
});
它可以在Viewpager的项目布局中显示。假设您一次需要两页
这是项目布局(photo\u slider\u Item.xml):
在你的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;
}
@覆盖
公共视图实例化项(视图组容器,int位置){
View sliderItem=LayoutInflater.from(container.getContext())。充气(照片\u滑块\u项目,容器,false);
ImageView photoBox1=(ImageView)sliderItem.findViewById(R.id.photoBox1);
ImageView photoBox2=(ImageView)sliderItem.findViewById(R.id.photoBox2);
photoBox1.setImageResource(PhotosID[position]);
if(位置
两个以上项目的编辑版本
如果需要两个以上的项目,请首先将项目添加到线性布局中,然后使用以下算法:
photoBox1.setImageResource(photosIds[position]);
if(position < photosIds.length-i-1){
photoBox2.setImageResource(photosIds[position+1]);
photoBox3.setImageResource(photosIds[position+2]);
.
.
.
photoBox(i).setImageResource(photosIds[position+i-1]);
} else if(position < photosIds.length-i-2){
photoBox2.setImageResource(photosIds[position+1]);
photoBox3.setImageResource(photosIds[position+2]);
.
.
.
photoBox(i-1).setImageResource(photosIds[position+i-2]);
photoBox(i).setImageResource(photosIds[0]);
} . . . else if(position < photosIds.length-1){
photoBox2.setImageResource(photosIds[position+1]);
photoBox3.setImageResource(photosIds[0]);
photoBox4.setImageResource(photosIds[1]);
.
.
.
photoBox(i-1).setImageResource(photosIds[i-2-2]);
photoBox(i).setImageResource(photosIds[i-2-1]);
} else {
photoBox2.setImageResource(photosIds[0]);
photoBox3.setImageResource(photosIds[1]);
.
.
.
photoBox(i-1).setImageResource(photosIds[i-1-2]);
photoBox(i).setImageResource(photosIds[i-1-1]);
}
photoBox1.setImageResource(photoId[position]);
if(位置
i:您的物品数量
<强> [i-2-2] :中间的2位是<>强> ValpPage >的最后一页的项目数。
我不太清楚你在问什么……你能解释多一点吗?我想让VIEWPGER并排显示两个可用的页面,就像一本书。你能用两个片段来实现一页一页的效果吗?这只是一个想法。。。不要责怪