ViewPagerViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。
ViewPager用于实现多页面的切换效果。
该类存在于Google的兼容包里面
java.lang.Object android.view.View
android.view.ViewGroup
android.support.v4.view.ViewPager ViewPager
常用方法setAdaptersetOffscreenPageLimit(int limit)设置保留不回收的页面数量
setCurrentItem(int item)滑动到指定的页码
ViewPager适配器PagerAdapter1.getCount() 获取绘制页面数量
2.instantiateItem(ViewGroup, int) 添加页面
3.destroyItem(ViewGroup, int, Object) 删除页面
4.isViewFromObject(View, Object) 判断instantiateItem所返回来的Key对应视图是不是当前显示的视图
public class GuidePagerAdapter extends PagerAdapter {
private String [] mImageList;
private LayoutInflater mInflater;
public GuidePagerAdapter(Context context, String [] imageList)
{this.mImageList = imageList;mInflater = LayoutInflater.from(context);}
@Override
public int getCount() {return mImageList != null ? mImageList.length : 0;}
@Override
public Object instantiateItem(ViewGroup container, int position)
{View itemView = mInflater.inflate(R.layout.item_guide, container, false);container.addView(itemView);return itemView;}
@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView((View)object);}
@Overridepublic boolean isViewFromObject(View view, Object object)
{return view == object;}}
FragmentPagerAdapter生成的页面都保存在内存中,适合页面数量较少的情况FragmentStatePagerAdapter切换页面之前页面会被销毁,释放资源,适合页面数量较多的情况ViewPager切换监听addOnPageChangeListeneronPageScrolled
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到onPageSelected页面跳转完后得到调用onPageScrollStateChanged在状态改变的时候调用。
一个页面上显示ViewPager的多个item问题方式一
@Overridepublic float getPageWidth(int position)
{ if (position != getCount() - 1) {
return 0.9f;
}
return 1.03f;
}
方式二1.在container和pager的中添加android:clipChildren="false"
2.在ViewPager中添加marginLeft和marginRight
3.在代码中设置viewPager.setPageMargin(80)
viewPager.setOffscreenPageLimit(3);
Viewpager在调用notifyDataSetChanged()
刷新问题class RefreshAdapter extends PagerAdapter {
private int mChildCount = 0;
@Overridepublic void notifyDataSetChanged() {
mChildCount = getCount();
super.notifyDataSetChanged();
}
@Overridepublic int getItemPosition(Object object) {
if ( mChildCount > 0) {
mChildCount --;
return POSITION_NONE;}
return super.getItemPosition(object);}}