怎么给viewpager设置一页显示不只一个条目
1、效果图
B:表示viewpager
A:表示viewpager的父布局
B和B之间的红线:表示viewpager两个item之间的间距。
2、原理
B距离其父布局左右都有间隔,然后让B的item不局限于其内部,即能存在于B的布局之外。同样,A也要允许B不局限于A内部(clipChildren属性)。然后,设置viewpager两个item之间的距离即可(setPageMargin)。最后不要忘记在viewpager滑动后更新A界面。
3、实践
[java] view plain copy
<LinearLayout xmlns:android=】】
android:layout_width="match_parent"
android:id="@+id/viewPagerContainer"
android:layout_height="match_parent"
android:background="#EEEEEE"
android:clipChildren="false"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="80dp"
android:layout_marginRight="80dp"
android:clipChildren="false" />
</LinearLayout>
[java] view plain copy
<span style="white-space:pre"> </span>pager.setOnPageChangeListener(new MyOnPageChangeListener());
<span style="white-space:pre"> </span>
// pageCount设置红缓存的页面数
pager.setOffscreenPageLimit(3);
// 设置2张图之前的间距。
pager.setPageMargin(20);
public class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// to refresh frameLayout
if (viewPagerContainer != null) {
viewPagerContainer.invalidate();
}
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
}
4、特例viewpager + fragment
setPageMargin必须是一个负数,才能实现两个item之间的间隔,否则两个item会重合~~~去实践吧,骚年。
5、注意事项
1.FragmentPagerAdapter和FragmentStaticPagerAdapter区别:第一个不会销毁fragment本身,只会销毁其视图。对于需要保存数据的很有用。
2.不要在Fragment中定义getView()来获取对应的视图,getView是其默认的方法,换一个名称吧(如:getFragView)。
3.要想动态更改fragment的视图,那你必须等到viewpager.setAdapter之后~否则无效果,因为fragment还未创建~
更多相关内容可参考资料www.viiboo.cn