這是谷歌官方給我們提供的一個兼容低版本安卓設備的軟件包衬吆,里面包囊了只有在安卓3.0以上可以使用的api实夹。而viewpager就是其中之一利用它直砂,我們可以做很多事情幌陕,從最簡單的導航,到頁面菜單等等存崖。那如何使用它呢冻记,與LisstView類似,我們也需要一個適配器来惧,他就是PagerAdapter冗栗。看一下api的圖片供搀,
ViewPager的功能就是可以使視圖滑動隅居,就像Lanucher左右滑動那樣。分三個步驟來使用它:
1.在住布局文件里加入
[html]view plaincopy
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
2.加載要顯示的頁卡葛虐,
[java]view plaincopy
LayoutInflater?lf?=?getLayoutInflater().from(this);
view1?=?lf.inflate(R.layout.layout1,null);
view2?=?lf.inflate(R.layout.layout2,null);
view3?=?lf.inflate(R.layout.layout3,null);
viewList?=newArrayList();//?將要分頁顯示的View裝入數(shù)組中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
3.在Activity里實例化ViewPager組件赠堵,并設置它的Adapter(就是PagerAdapter善绎,方法與ListView一樣的)伐弹,在這里一般需要重寫PagerAdapter笤虫。
[java]view plaincopy
PagerAdapter?pagerAdapter?=newPagerAdapter()?{
@Override
publicbooleanisViewFromObject(View?arg0,?Object?arg1)?{
returnarg0?==?arg1;
}
@Override
publicintgetCount()?{
returnviewList.size();
}
@Override
publicvoiddestroyItem(ViewGroup?container,intposition,
Object?object)?{
container.removeView(viewList.get(position));
}
@Override
publicintgetItemPosition(Object?object)?{
returnsuper.getItemPosition(object);
}
@Override
publicCharSequence?getPageTitle(intposition)?{
returntitleList.get(position);
}
@Override
publicObject?instantiateItem(ViewGroup?container,intposition)?{
container.addView(viewList.get(position));
weibo_button=(Button)?findViewById(R.id.button1);
weibo_button.setOnClickListener(newOnClickListener()?{
publicvoidonClick(View?v)?{
intent=newIntent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
returnviewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
這是重寫PagerAdapter的一個方法穆碎,我們還可以這樣做:
[java]view plaincopy
publicclassMyViewPagerAdapterextendsPagerAdapter{
privateList?mListViews;
publicMyViewPagerAdapter(List?mListViews)?{
this.mListViews?=?mListViews;//構(gòu)造方法延欠,參數(shù)是我們的頁卡峡竣,這樣比較方便现恼。
}
@Override
publicvoiddestroyItem(ViewGroup?container,intposition,?Object?object)???{
container.removeView(mListViews.get(position));//刪除頁卡
}
@Override
publicObject?instantiateItem(ViewGroup?container,intposition)?{//這個方法用來實例化頁卡
container.addView(mListViews.get(position),0);//添加頁卡
returnmListViews.get(position);
}
@Override
publicintgetCount()?{
returnmListViews.size();//返回頁卡的數(shù)量
}
@Override
publicbooleanisViewFromObject(View?arg0,?Object?arg1)?{
returnarg0==arg1;//官方提示這樣寫
}
}
大同小異愧捕,有一定很重要奢驯,就是我們需要重寫哪些方法。從上面的圖片可以看到次绘,ViewPager的適配器是PagerAdapter瘪阁,它是基類提供適配器來填充頁面ViewPager內(nèi)部,你很可能想要使用一個更具體的實現(xiàn),如FragmentPagerAdapter或FragmentStatePagerAdapter邮偎。在這里需要說明一下管跺,其實ViewPager應該和Fragment一起使用,至少谷歌官方是這么想的禾进,但是在3.0之下豁跑,我們沒有必要這么做。下面要注意泻云,當你實現(xiàn)一個PagerAdapter,你必須至少覆蓋以下方法:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
isViewFromObject(View, Object)
從上面的例子中可以看到艇拍,我們最少也是實現(xiàn)了上面四個方法狐蜕,當然如果你想讓程序更健壯或是功能更全面,你可以重寫其他的方法卸夕。下面看一下第一個完整的示例代碼:
主頁面Activity:
[java]view plaincopy
packagecom.example.viewpagerdemo;
importjava.util.ArrayList;
importjava.util.List;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.support.v4.view.PagerAdapter;
importandroid.support.v4.view.PagerTabStrip;
importandroid.support.v4.view.PagerTitleStrip;
importandroid.support.v4.view.ViewPager;
importandroid.util.AttributeSet;
importandroid.view.LayoutInflater;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup;
importandroid.widget.Button;
publicclassViewPagerDemoextendsActivity?{
privateView?view1,?view2,?view3;//需要滑動的頁卡
privateViewPager?viewPager;//viewpager
privatePagerTitleStrip?pagerTitleStrip;//viewpager的標題
privatePagerTabStrip?pagerTabStrip;//一個viewpager的指示器层释,效果就是一個橫的粗的下劃線
privateList?viewList;//把需要滑動的頁卡添加到這個list中
privateList?titleList;//viewpager的標題
privateButton?weibo_button;//button對象,一會用來進入第二個Viewpager的示例
privateIntent?intent;
@Override
publicvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_demo);
initView();
}
/*在這里需要說明一下快集,在上面的圖片中我們看到了贡羔,PagerTabStrip,PagerTitleStrip个初,他們其實是viewpager的一個指示器治力,前者效果就是一個橫的粗的下劃線,后者用來顯示各個頁卡的標題勃黍,當然而這也可以共存宵统。在使用他們的時候需要注意,看下面的布局文件覆获,要在android.support.v4.view.ViewPager里面添加
android.support.v4.view.PagerTabStrip以及android.support.v4.view.PagerTitleStrip马澈。
private?void?initView()?{
viewPager?=?(ViewPager)?findViewById(R.id.viewpager);
//pagerTitleStrip?=?(PagerTitleStrip)?findViewById(R.id.pagertitle);
pagerTabStrip=(PagerTabStrip)?findViewById(R.id.pagertab);
pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.gold));
pagerTabStrip.setDrawFullUnderline(false);
pagerTabStrip.setBackgroundColor(getResources().getColor(R.color.azure));
pagerTabStrip.setTextSpacing(50);
/*
weibo_button=(Button)?findViewById(R.id.button1);
weibo_button.setOnClickListener(new?OnClickListener()?{
public?void?onClick(View?v)?{
intent=new?Intent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
*/
view1?=?findViewById(R.layout.layout1);
view2?=?findViewById(R.layout.layout2);
view3?=?findViewById(R.layout.layout3);
LayoutInflater?lf?=?getLayoutInflater().from(this);
view1?=?lf.inflate(R.layout.layout1,null);
view2?=?lf.inflate(R.layout.layout2,null);
view3?=?lf.inflate(R.layout.layout3,null);
viewList?=newArrayList();//?將要分頁顯示的View裝入數(shù)組中
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
titleList?=newArrayList();//?每個頁面的Title數(shù)據(jù)
titleList.add("wp");
titleList.add("jy");
titleList.add("jh");
PagerAdapter?pagerAdapter?=newPagerAdapter()?{
@Override
publicbooleanisViewFromObject(View?arg0,?Object?arg1)?{
returnarg0?==?arg1;
}
@Override
publicintgetCount()?{
returnviewList.size();
}
@Override
publicvoiddestroyItem(ViewGroup?container,intposition,
Object?object)?{
container.removeView(viewList.get(position));
}
@Override
publicintgetItemPosition(Object?object)?{
returnsuper.getItemPosition(object);
}
@Override
publicCharSequence?getPageTitle(intposition)?{
returntitleList.get(position);//直接用適配器來完成標題的顯示,所以從上面可以看到弄息,我們沒有使用PagerTitleStrip痊班。當然你可以使用。
}
@Override
publicObject?instantiateItem(ViewGroup?container,intposition)?{
container.addView(viewList.get(position));
weibo_button=(Button)?findViewById(R.id.button1);//這個需要注意摹量,我們是在重寫adapter里面實例化button組件的涤伐,如果你在onCreate()方法里這樣做會報錯的。
weibo_button.setOnClickListener(newOnClickListener()?{
publicvoidonClick(View?v)?{
intent=newIntent(ViewPagerDemo.this,WeiBoActivity.class);
startActivity(intent);
}
});
returnviewList.get(position);
}
};
viewPager.setAdapter(pagerAdapter);
}
@Override
publicbooleanonCreateOptionsMenu(Menu?menu)?{
getMenuInflater().inflate(R.menu.activity_view_pager_demo,?menu);
returntrue;
}
}
它的布局文件:
[java]view plaincopy
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
android:id="@+id/pagertab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"/>
1.這里ViewPager和?PagerTabStrip都要把包名寫全了缨称,不然會ClassNotFount
2.API中說:在布局xml把PagerTabStrip當做ViewPager的一個子標簽來用凝果,不能拿出來,不然還是會報錯
3.在PagerTabStrip標簽中可以用屬性android:layout_gravity=TOP|BOTTOM來指定title的位置
4.如果要顯示出PagerTabStrip某一頁的title,需要在ViewPager的adapter中實現(xiàn)getPageTitle(int)-->
這樣就完成了一個簡單的ViewPager的使用示例睦尽,看一下效果圖:
可以左右滑動頁卡器净,但是仔細看一下,標題的效果不好当凡,不能一次顯示一個山害,而且標題還滑動。其實在api里面提供了一個pagerTabStrip.setTextSpacing()來設置標題的距離沿量,但是我在這里設置了浪慌,沒有效果不知道為什么,明白的朋友希望能夠賜教一下朴则。
所以就有人使用下面這樣的方法來仿微博的效果权纤,
這個標題就固定了,而且可以左右滑動妖碉,也有下面的橫線涌庭,來指示頁卡。方法和上面的差不多欧宜,區(qū)別在于這個橫線需要我們自己來做坐榆,其實就是一個圖片。這個例子是網(wǎng)上的一篇文章冗茸,看代碼:
主Activity:
[java]view plaincopy
packagecom.example.viewpagerdemo;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Matrix;
importandroid.os.Bundle;
importandroid.support.v4.view.PagerAdapter;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.util.DisplayMetrics;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.animation.Animation;
importandroid.view.animation.TranslateAnimation;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassWeiBoActivityextendsActivity?{
privateViewPager?viewPager;//頁卡內(nèi)容
privateImageView?imageView;//?動畫圖片
privateTextView?textView1,textView2,textView3;
privateList?views;//?Tab頁面列表
privateintoffset?=0;//?動畫圖片偏移量
privateintcurrIndex?=0;//?當前頁卡編號
privateintbmpW;//?動畫圖片寬度
privateView?view1,view2,view3;//各個頁卡
@Override
protectedvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.weibo);
InitImageView();
InitTextView();
InitViewPager();
}
privatevoidInitViewPager()?{
viewPager=(ViewPager)?findViewById(R.id.vPager);
views=newArrayList();
LayoutInflater?inflater=getLayoutInflater();
view1=inflater.inflate(R.layout.lay1,null);
view2=inflater.inflate(R.layout.lay2,null);
view3=inflater.inflate(R.layout.lay3,null);
views.add(view1);
views.add(view2);
views.add(view3);
viewPager.setAdapter(newMyViewPagerAdapter(views));
viewPager.setCurrentItem(0);
viewPager.setOnPageChangeListener(newMyOnPageChangeListener());
}
/**
*??初始化頭標
*/
privatevoidInitTextView()?{
textView1?=?(TextView)?findViewById(R.id.text1);
textView2?=?(TextView)?findViewById(R.id.text2);
textView3?=?(TextView)?findViewById(R.id.text3);
textView1.setOnClickListener(newMyOnClickListener(0));
textView2.setOnClickListener(newMyOnClickListener(1));
textView3.setOnClickListener(newMyOnClickListener(2));
}
/**
2??????*?初始化動畫席镀,這個就是頁卡滑動時,下面的橫線也滑動的效果夏漱,在這里需要計算一些數(shù)據(jù)
3?*/
privatevoidInitImageView()?{
imageView=?(ImageView)?findViewById(R.id.cursor);
bmpW?=?BitmapFactory.decodeResource(getResources(),?R.drawable.a).getWidth();//?獲取圖片寬度
DisplayMetrics?dm?=newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
intscreenW?=?dm.widthPixels;//?獲取分辨率寬度
offset?=?(screenW?/3-?bmpW)?/2;//?計算偏移量
Matrix?matrix?=newMatrix();
matrix.postTranslate(offset,0);
imageView.setImageMatrix(matrix);//?設置動畫初始位置
}
/**
*
*?頭標點擊監(jiān)聽?3?*/
privateclassMyOnClickListenerimplementsOnClickListener{
privateintindex=0;
publicMyOnClickListener(inti){
index=i;
}
publicvoidonClick(View?v)?{
viewPager.setCurrentItem(index);
}
}
publicclassMyViewPagerAdapterextendsPagerAdapter{
privateList?mListViews;
publicMyViewPagerAdapter(List?mListViews)?{
this.mListViews?=?mListViews;
}
@Override
publicvoiddestroyItem(ViewGroup?container,intposition,?Object?object)???{
container.removeView(mListViews.get(position));
}
@Override
publicObject?instantiateItem(ViewGroup?container,intposition)?{
container.addView(mListViews.get(position),0);
returnmListViews.get(position);
}
@Override
publicintgetCount()?{
returnmListViews.size();
}
@Override
publicbooleanisViewFromObject(View?arg0,?Object?arg1)?{
returnarg0==arg1;
}
}
publicclassMyOnPageChangeListenerimplementsOnPageChangeListener{
intone?=?offset?*2+?bmpW;//?頁卡1?->?頁卡2?偏移量
inttwo?=?one?*2;//?頁卡1?->?頁卡3?偏移量
publicvoidonPageScrollStateChanged(intarg0)?{
}
publicvoidonPageScrolled(intarg0,floatarg1,intarg2)?{
}
publicvoidonPageSelected(intarg0)?{
/*兩種方法豪诲,這個是一種,下面還有一種挂绰,顯然這個比較麻煩
Animation?animation?=?null;
switch?(arg0)?{
case?0:
if?(currIndex?==?1)?{
animation?=?new?TranslateAnimation(one,?0,?0,?0);
}?else?if?(currIndex?==?2)?{
animation?=?new?TranslateAnimation(two,?0,?0,?0);
}
break;
case?1:
if?(currIndex?==?0)?{
animation?=?new?TranslateAnimation(offset,?one,?0,?0);
}?else?if?(currIndex?==?2)?{
animation?=?new?TranslateAnimation(two,?one,?0,?0);
}
break;
case?2:
if?(currIndex?==?0)?{
animation?=?new?TranslateAnimation(offset,?two,?0,?0);
}?else?if?(currIndex?==?1)?{
animation?=?new?TranslateAnimation(one,?two,?0,?0);
}
break;
}
*/
Animation?animation?=newTranslateAnimation(one*currIndex,?one*arg0,0,0);//顯然這個比較簡潔屎篱,只有一行代碼。
currIndex?=?arg0;
animation.setFillAfter(true);//?True:圖片停在動畫結(jié)束位置
animation.setDuration(300);
imageView.startAnimation(animation);
Toast.makeText(WeiBoActivity.this,"您選擇了"+?viewPager.getCurrentItem()+"頁卡",?Toast.LENGTH_SHORT).show();
}
}
}
它的布局文件:
[java]view plaincopy
lt;LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="40.0dip"
android:background="#FFFFFF">
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="?@我"
android:textColor="#000000"
android:textSize="20.0dip"/>
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="評論"
android:textColor="#000000"
android:textSize="20.0dip"/>
android:id="@+id/text3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="center"
android:text="私信"
android:textColor="#000000"
android:textSize="20.0dip"/>
android:id="@+id/cursor"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="matrix"
android:src="@drawable/a"/>
android:id="@+id/vPager"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_weight="1.0"
android:background="#000000"
android:flipInterval="30"
android:persistentDrawingCache="animation"/>
lt;/LinearLayout>
效果如下:
下面使用ViewPager來實現(xiàn)一個程序引導的demo:
一般來說葵蒂,引導界面是出現(xiàn)第一次運行時出現(xiàn)的交播,之后不會再出現(xiàn)。所以需要記錄是否是第一次使用程序践付,辦法有很多秦士,最容易想到的就是使用SharedPreferences來保存。步驟如下:
1永高、程序進入歡迎界面隧土,SplashActivity,在這里讀取SharedPreferences里面的變量命爬,先設置為true曹傀。進入引導界面,然后設置為false遇骑。
2卖毁、之后每次進入歡迎界面讀取SharedPreferences里面的變量,因為是false落萎,所以不會運行引導界面了。
代碼如下:
SplashActivity.java,歡迎界面炭剪。
[java]view plaincopy
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
/**
*/
publicclassSplashActivityextendsActivity?{
booleanisFirstIn?=false;
privatestaticfinalintGO_HOME?=1000;
privatestaticfinalintGO_GUIDE?=1001;
//?延遲3秒
privatestaticfinallongSPLASH_DELAY_MILLIS?=3000;
privatestaticfinalString?SHAREDPREFERENCES_NAME?="first_pref";
/**
*?Handler:跳轉(zhuǎn)到不同界面
*/
privateHandler?mHandler?=newHandler()?{
@Override
publicvoidhandleMessage(Message?msg)?{
switch(msg.what)?{
caseGO_HOME:
goHome();
break;
caseGO_GUIDE:
goGuide();
break;
}
super.handleMessage(msg);
}
};
@Override
protectedvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
init();
}
privatevoidinit()?{
//?讀取SharedPreferences中需要的數(shù)據(jù)
//?使用SharedPreferences來記錄程序的使用次數(shù)
SharedPreferences?preferences?=?getSharedPreferences(
SHAREDPREFERENCES_NAME,?MODE_PRIVATE);
//?取得相應的值练链,如果沒有該值,說明還未寫入奴拦,用true作為默認值
isFirstIn?=?preferences.getBoolean("isFirstIn",true);
//?判斷程序與第幾次運行媒鼓,如果是第一次運行則跳轉(zhuǎn)到引導界面,否則跳轉(zhuǎn)到主界面
if(!isFirstIn)?{
//?使用Handler的postDelayed方法,3秒后執(zhí)行跳轉(zhuǎn)到MainActivity
mHandler.sendEmptyMessageDelayed(GO_HOME,?SPLASH_DELAY_MILLIS);
}else{
mHandler.sendEmptyMessageDelayed(GO_GUIDE,?SPLASH_DELAY_MILLIS);
}
}
privatevoidgoHome()?{
Intent?intent?=newIntent(SplashActivity.this,?MainActivity.class);
SplashActivity.this.startActivity(intent);
SplashActivity.this.finish();
}
privatevoidgoGuide()?{
Intent?intent?=newIntent(SplashActivity.this,?GuideActivity.class);
SplashActivity.this.startActivity(intent);
SplashActivity.this.finish();
}
}
GuideActivity.java引導界面:
[java]view plaincopy
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importcn.eoe.leigo.splash.adapter.ViewPagerAdapter;
/**
*
*
*/
publicclassGuideActivityextendsActivityimplementsOnPageChangeListener?{
privateViewPager?vp;
privateViewPagerAdapter?vpAdapter;
privateList?views;
//?底部小點圖片
privateImageView[]?dots;
//?記錄當前選中位置
privateintcurrentIndex;
@Override
protectedvoidonCreate(Bundle?savedInstanceState)?{
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);
//?初始化頁面
initViews();
//?初始化底部小點
initDots();
}
privatevoidinitViews()?{
LayoutInflater?inflater?=?LayoutInflater.from(this);
views?=newArrayList();
//?初始化引導圖片列表
views.add(inflater.inflate(R.layout.what_new_one,null));
views.add(inflater.inflate(R.layout.what_new_two,null));
views.add(inflater.inflate(R.layout.what_new_three,null));
views.add(inflater.inflate(R.layout.what_new_four,null));
//?初始化Adapter
vpAdapter?=newViewPagerAdapter(views,this);
vp?=?(ViewPager)?findViewById(R.id.viewpager);
vp.setAdapter(vpAdapter);
//?綁定回調(diào)
vp.setOnPageChangeListener(this);
}
privatevoidinitDots()?{
LinearLayout?ll?=?(LinearLayout)?findViewById(R.id.ll);
dots?=newImageView[views.size()];
//?循環(huán)取得小點圖片
for(inti?=0;?i?<?views.size();?i++)?{
dots[i]?=?(ImageView)?ll.getChildAt(i);
dots[i].setEnabled(true);//?都設為灰色
}
currentIndex?=0;
dots[currentIndex].setEnabled(false);//?設置為白色绿鸣,即選中狀態(tài)
}
privatevoidsetCurrentDot(intposition)?{
if(position?<0||?position?>?views.size()?-1
||?currentIndex?==?position)?{
return;
}
dots[position].setEnabled(false);
dots[currentIndex].setEnabled(true);
currentIndex?=?position;
}
//?當滑動狀態(tài)改變時調(diào)用
@Override
publicvoidonPageScrollStateChanged(intarg0)?{
}
//?當當前頁面被滑動時調(diào)用
@Override
publicvoidonPageScrolled(intarg0,floatarg1,intarg2)?{
}
//?當新的頁面被選中時調(diào)用
@Override
publicvoidonPageSelected(intarg0)?{
//?設置底部小點選中狀態(tài)
setCurrentDot(arg0);
}
}
ViewPagerAdapter.java疚沐。ViewPager的適配器:
[java]view plaincopy
importjava.util.List;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.SharedPreferences;
importandroid.content.SharedPreferences.Editor;
importandroid.os.Parcelable;
importandroid.support.v4.view.PagerAdapter;
importandroid.support.v4.view.ViewPager;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.ImageView;
importcn.eoe.leigo.splash.MainActivity;
importcn.eoe.leigo.splash.R;
/**
*/
publicclassViewPagerAdapterextendsPagerAdapter?{
//?界面列表
privateList?views;
privateActivity?activity;
privatestaticfinalString?SHAREDPREFERENCES_NAME?="first_pref";
publicViewPagerAdapter(List?views,?Activity?activity)?{
this.views?=?views;
this.activity?=?activity;
}
//?銷毀arg1位置的界面
@Override
publicvoiddestroyItem(View?arg0,intarg1,?Object?arg2)?{
((ViewPager)?arg0).removeView(views.get(arg1));
}
@Override
publicvoidfinishUpdate(View?arg0)?{
}
//?獲得當前界面數(shù)
@Override
publicintgetCount()?{
if(views?!=null)?{
returnviews.size();
}
return0;
}
//?初始化arg1位置的界面
@Override
publicObject?instantiateItem(View?arg0,intarg1)?{
((ViewPager)?arg0).addView(views.get(arg1),0);
if(arg1?==?views.size()?-1)?{
ImageView?mStartWeiboImageButton?=?(ImageView)?arg0
.findViewById(R.id.iv_start_weibo);
mStartWeiboImageButton.setOnClickListener(newOnClickListener()?{
@Override
publicvoidonClick(View?v)?{
//?設置已經(jīng)引導
setGuided();
goHome();
}
});
}
returnviews.get(arg1);
}
privatevoidgoHome()?{
//?跳轉(zhuǎn)
Intent?intent?=newIntent(activity,?MainActivity.class);
activity.startActivity(intent);
activity.finish();
}
/**
*
*?method?desc:設置已經(jīng)引導過了,下次啟動不用再次引導
*/
privatevoidsetGuided()?{
SharedPreferences?preferences?=?activity.getSharedPreferences(
SHAREDPREFERENCES_NAME,?Context.MODE_PRIVATE);
Editor?editor?=?preferences.edit();
//?存入數(shù)據(jù)
editor.putBoolean("isFirstIn",false);
//?提交修改
editor.commit();
}
//?判斷是否由對象生成界面
@Override
publicbooleanisViewFromObject(View?arg0,?Object?arg1)?{
return(arg0?==?arg1);
}
@Override
publicvoidrestoreState(Parcelable?arg0,?ClassLoader?arg1)?{
}
@Override
publicParcelable?saveState()?{
returnnull;
}
@Override
publicvoidstartUpdate(View?arg0)?{
}
}
至于MainActivity隨便了潮模。
效果如下:
http://www.fjzzled.com/hzjdyyyyjs/95.html
http://www.fjzzled.com/hzjdyyyyjs/94.html
http://www.sjys365.com/smzl/2999.html
http://www.sjys365.com/smzl/2998.html
所以總結(jié)一下亮蛔,我們可以使用ViewPager做什么:
1.程序使用導航,外加底部圓點的效果擎厢,這個在微信示例里介紹了
2.頁卡滑動究流,加上菜單的效果,不管是之前的支持手勢也支持底部圖標點擊的微信动遭,還是今天的微博