我在设计一个有多个页面的视图。我想要前一页和下一页的边缘显示如下,并实现2个手指滑动切换页。
我尝试使用viewpager
,按这里的建议使用负页边距,但这只在屏幕上显示其中一个边,而不是同时显示两个边。
或者,是否有任何方法可以将视图的一部分定位在屏幕之外,然后将其动画化,使其具有viewpager
类型效果。
我该怎么做呢?谢啦!
引用我自己关于这个主题的博客文章:
第三种方法来自Dave Smith,他是颇受好评的《安卓食谱》一书的合著者。他走了一个非常不同的方向,使用了一个自定义容器,使儿童剪辑不能一次显示多页。
他发布的示例代码显示了整个过程。他的容器(com.example.PagerContainer.PagerContainer
)包装ViewPager
并在其自身调用SetClipChildren(false);
,因此即使ViewPager
集中在一个选定的页面上,坐标超出ViewPager
边界的其他页面仍然可见,只要它们适合PagerContainer
。通过将ViewPager
的大小调整为小于PagerContainer
,ViewPager
可以将其页面调整为该大小,从而为其他页面留出空间。不过,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);
可选。为第一项设置零左填充,为最后一项设置零右填充,以隐藏空边缘。您可以在PageAdapter
或Page
片段类中执行此操作。