提问者:小点点

具有上一页和下一页边界的ViewPager


我在设计一个有多个页面的视图。我想要前一页和下一页的边缘显示如下,并实现2个手指滑动切换页。

我尝试使用viewpager,按这里的建议使用负页边距,但这只在屏幕上显示其中一个边,而不是同时显示两个边。

或者,是否有任何方法可以将视图的一部分定位在屏幕之外,然后将其动画化,使其具有viewpager类型效果。

我该怎么做呢?谢啦!


共3个答案

匿名用户

引用我自己关于这个主题的博客文章:

第三种方法来自Dave Smith,他是颇受好评的《安卓食谱》一书的合著者。他走了一个非常不同的方向,使用了一个自定义容器,使儿童剪辑不能一次显示多页。

他发布的示例代码显示了整个过程。他的容器(com.example.PagerContainer.PagerContainer)包装ViewPager并在其自身调用SetClipChildren(false);,因此即使ViewPager集中在一个选定的页面上,坐标超出ViewPager边界的其他页面仍然可见,只要它们适合PagerContainer。通过将ViewPager的大小调整为小于PagerContainerViewPager可以将其页面调整为该大小,从而为其他页面留出空间。不过,PagerContainer需要在触摸事件方面提供一点帮助,因为ViewPager将只在自己的可见边界上处理滑动事件,而忽略两侧可见的任何页面。

匿名用户

我有一个类似的解决方案:

在取景器上设置左右填充,例如20dp。还应设置viewpager上的页边距,例如页边距的一半。不要忘记禁用剪辑填充。

tilePager.setPadding(defaultGap, 0, defaultGap, 0);
tilePager.setClipToPadding(false);
tilePager.setPageMargin(halfGap);

匿名用户

>

  • 设置整个项目视图的左右填充。xml(page_item.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"/>
    
    <TextView
        android:id="@+id/text1"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </LinearLayout>
    

    然后将PageView的负页边距设置为等于2*(上一视图边距)

    int margin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20*2,     getResources().getDisplayMetrics());
    mViewPager.setPageMargin(-margin);
    

    可选。为第一项设置零左填充,为最后一项设置零右填充,以隐藏空边缘。您可以在PageAdapterPage片段类中执行此操作。