ViewPagerViewPager的功能就是可以使視圖滑動(dòng)扎即,就像Lanucher左右滑動(dòng)那樣。
ViewPager用于實(shí)現(xiàn)多頁面的切換效果川陆。
該類存在于Google的兼容包里面
java.lang.Object? ? android.view.View ??
android.view.ViewGroup
android.support.v4.view.ViewPager ViewPager
常用方法setAdaptersetOffscreenPageLimit(int limit)設(shè)置保留不回收的頁面數(shù)量
setCurrentItem(int item)滑動(dòng)到指定的頁碼
ViewPager適配器PagerAdapter1.getCount() ?獲取繪制頁面數(shù)量
2.instantiateItem(ViewGroup, int)? 添加頁面
3.destroyItem(ViewGroup, int, Object)? 刪除頁面
4.isViewFromObject(View, Object)? 判斷instantiateItem所返回來的Key對(duì)應(yīng)視圖是不是當(dāng)前顯示的視圖
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生成的頁面都保存在內(nèi)存中铐尚,適合頁面數(shù)量較少的情況FragmentStatePagerAdapter切換頁面之前頁面會(huì)被銷毀玫恳,釋放資源,適合頁面數(shù)量較多的情況ViewPager切換監(jiān)聽addOnPageChangeListeneronPageScrolled
當(dāng)頁面在滑動(dòng)的時(shí)候會(huì)調(diào)用此方法芙沥,在滑動(dòng)被停止之前诲祸,此方法回一直得到onPageSelected頁面跳轉(zhuǎn)完后得到調(diào)用onPageScrollStateChanged在狀態(tài)改變的時(shí)候調(diào)用。
一個(gè)頁面上顯示ViewPager的多個(gè)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.在代碼中設(shè)置viewPager.setPageMargin(80)
viewPager.setOffscreenPageLimit(3);
Viewpager在調(diào)用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);}}