爱奇艺Banner.png
一、显示多个page页面(2种方法)
方法1:ViewPager设置外边距+android:clipChildren="false"
<android.support.v4.view.ViewPager
...
android:clipChildren="false"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"/>
注意:父布局也要添加 android:clipChildren="false"属性
方法2: ViewPager设置内边距+android:clipToPadding="false" 属性
<android.support.v4.view.ViewPager
...
android:clipToPadding="false"
android:paddingLeft="30dp"
android:paddingRight="30dp"/>
android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩
android:clipToPadding的意思:是否在padding内绘制控件,默认ture
- ViewPager设置外边距
<android.support.v4.view.ViewPager
...
android:clipToPadding="false"
android:clipChildren="false"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"/>
- ViewPager添加 android:clipChildren="false" 属性
- ViewPager父布局添加 android:clipChildren="false" 属性
android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩
二、ViewPager设置
//表示设置page之间的间距
mViewPager.setPageMargin(getResources().getDimensionPixelSize(R.dimen.page_margin));
//表示设置缓存,这样左右拖动即可看见后面的page
mViewPager.setOffscreenPageLimit(2);//这里必须大于2,否则能看到边侧页面加载的bug
三、所有页面都有滑动时间(默认只有中间的有滑动事件)
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// to refresh frameLayout
if (mViewPagerPanent != null) {
mViewPagerPanent.invalidate();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
mViewPagerPanent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// dispatch the events to the ViewPager, to solve the problem that we can swipe only the middle view.
return mViewPager.dispatchTouchEvent(event);
}
});
可能运行后出现viewpager的部分page页面无法看见或是突然消失的问题。
- 1、请确保ViewPager和父布局的android:clipChildren都设置为了false并且
- 2、viewPager.setOffscreenPageLimit(count);其中count大于0。
- 3、viewpager设置了paddingTop也会导致无法实现画廊而只是显示一屏。