詳解Android App中創(chuàng)建ViewPager組件的方法
現(xiàn)在很多app一打開(kāi)就是一個(gè)ViewPager,然后可以用手指滑,每滑一次就換一張圖,底下還會(huì)有圈圈表示說(shuō)現(xiàn)在滑到第幾章~
通常這些圖片都是放功能簡(jiǎn)介或是使用教學(xué)之類的,我的需求很簡(jiǎn)單,就是上面提到的那樣而已。
有兩種做法,一種是找現(xiàn)有套件,查了一堆資料每個(gè)都跟我推薦ViewPagerIndicator這套,我之前也看過(guò)這套,只是看起來(lái)需要有fragment再加上google play范例好像載不到了,所以只好自己實(shí)做一個(gè)。
Viewpager的實(shí)作可參考Android ViewPager使用詳解里面的程序碼:
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intro);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
final LayoutInflater mInflater = getLayoutInflater().from(this);
View v1 = mInflater.inflate(R.layout.intro_layout_1, null);
View v2 = mInflater.inflate(R.layout.intro_layout_2, null);
View v3 = mInflater.inflate(R.layout.intro_layout_3, null);
View v4 = mInflater.inflate(R.layout.intro_layout_4, null);
viewList = new ArrayList<View>();
viewList.add(v1);
viewList.add(v2);
viewList.add(v3);
viewList.add(v4);
mViewPager.setAdapter(new MyViewPagerAdapter(viewList));
mViewPager.setCurrentItem(0);}
MyViewPagerAdapter
public class MyViewPagerAdapter extends PagerAdapter {
private List<View> mListViews;
public MyViewPagerAdapter(List<View> mListViews) {
this.mListViews = mListViews;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mListViews.get(position);
container.addView(view);
return view;
}
@Override
public int getCount() {
return mListViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}}
這樣子你就有一個(gè)ViewPager了
下面我們來(lái)具體看一下ViewPager的用法:
一、ViewPager創(chuàng)建步驟
① 在XML布局中加入android.support.v4.view.ViewPager
② 加載顯示的頁(yè)卡將Layout布局轉(zhuǎn)換為View對(duì)象
(1)
LayoutInflater lf getLayoutInflater().from(this); lf.inflate(resource,root);
(2)
View.inflate(context,resource,root);
③ 配置Adapter(三種Adapter)
(1)PagerAdapter 數(shù)據(jù)源:List<View>
(2)FragmentPagerAdapter 數(shù)據(jù)源:List<Fragment>
(3)FragmentStatePagerAdapter 數(shù)據(jù)源:List<Fragment>
二、代碼示例
新建四個(gè)Fragment和他們的布局下面是MainActivity的xml布局:
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" >
<android.support.v4.view.PagerTabStrip
android:id="@+id/tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top" >
</android.support.v4.view.PagerTabStrip>
<!-- 底部顯示標(biāo)題與上面的頂部顯示不能同時(shí)出現(xiàn)
<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom" >
</android.support.v4.view.PagerTitleStrip>
-->
</android.support.v4.view.ViewPager>
第一種PagerAdapter
public class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
private List<String> titleList;
public MyPagerAdapter(List<View> viewList,List<String> titleList){
this.viewList = viewList;
this.titleList = titleList;
}
/**
* 返回頁(yè)卡的數(shù)量
*/
@Override
public int getCount() {
return viewList.size();
}
/**
* view是否來(lái)自對(duì)象
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
/**
* 實(shí)例化一個(gè)頁(yè)卡
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
/**
* 銷毀一個(gè)頁(yè)卡
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
/**
* 設(shè)置ViewPager的標(biāo)題
*/
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
}
第二種FragmentPagerAdapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragList;
private List<String> titleList;
public MyFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragList,List<String> titleList) {
super(fm);
this.fragList = fragList;
this.titleList = titleList;
}
@Override
public Fragment getItem(int arg0) {
return fragList.get(arg0);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public int getCount() {
return fragList.size();
}
}
第三種FragmentStatePagerAdapter(該適配器可以動(dòng)態(tài)銷毀Fragment)
public class MyFragmentPagerAdapter2 extends FragmentStatePagerAdapter {//該適配器可以動(dòng)態(tài)銷毀
private List<Fragment> fragList;
private List<String> titleList;
public MyFragmentPagerAdapter2(FragmentManager fm,List<Fragment> fragList,List<String> titleList) {
super(fm);
this.fragList = fragList;
this.titleList = titleList;
}
@Override
public Fragment getItem(int arg0) {
return fragList.get(arg0);
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
@Override
public int getCount() {
return fragList.size();
}
@Override
public Object instantiateItem(ViewGroup arg0, int arg1) {
return super.instantiateItem(arg0, arg1);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
}
MainActivity里使用getSupportFragmentManager()該Activity必須繼承FragmentActivity:
public class MainActivity extends FragmentActivity implements OnPageChangeListener{
private List<View> viewList;
private List<String> titleList;
private ViewPager pager;
private PagerTabStrip tab;//頂部標(biāo)題
private List<Fragment> fragList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewList = new ArrayList<View>();
titleList = new ArrayList<String>();
tab = (PagerTabStrip) findViewById(R.id.tab);
View view1 = View.inflate(this,R.layout.view1,null);
View view2 = View.inflate(this,R.layout.view2,null);
View view3 = View.inflate(this,R.layout.view3,null);
View view4 = View.inflate(this,R.layout.view4,null);
viewList.add(view1);
viewList.add(view2);
viewList.add(view3);
viewList.add(view4);
fragList = new ArrayList<Fragment>();
fragList.add(new Fragment1());
fragList.add(new Fragment2());
fragList.add(new Fragment3());
fragList.add(new Fragment4());
//為ViewPager頁(yè)卡設(shè)置標(biāo)題
titleList.add("第一頁(yè)");
titleList.add("第二頁(yè)");
titleList.add("第三頁(yè)");
titleList.add("第四頁(yè)");
//為PagerTabStrip設(shè)置一些屬性
tab.setBackgroundColor(Color.WHITE);
tab.setDrawFullUnderline(false);
tab.setTabIndicatorColor(Color.BLUE);
pager = (ViewPager) findViewById(R.id.pager);
//MyPagerAdapter adapter = new MyPagerAdapter(viewList,titleList);
//MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragList, titleList);
/**
* 使用getSupportFragmentManager()該Activity必須繼承FragmentActivity
*/
MyFragmentPagerAdapter2 adapter = new MyFragmentPagerAdapter2(getSupportFragmentManager(), fragList, titleList);
pager.setAdapter(adapter);
pager.setOnPageChangeListener(this);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
Toast.makeText(this,"當(dāng)前是第"+(arg0+1)+"個(gè)界面", 0).show();
}
}
- Android中ViewPager的PagerTabStrip與PagerTitleStrip用法實(shí)例
- Android中的ViewPager視圖滑動(dòng)切換類的入門實(shí)例教程
- Android實(shí)現(xiàn)千變?nèi)f化的ViewPager切換動(dòng)畫
- Android自定義ViewPager實(shí)現(xiàn)個(gè)性化的圖片切換效果
- Android利用HorizontalScrollView仿ViewPager設(shè)計(jì)簡(jiǎn)單相冊(cè)
- Android ViewPager制作新手導(dǎo)航頁(yè)(動(dòng)態(tài)加載)
- Android App中用Handler實(shí)現(xiàn)ViewPager頁(yè)面的自動(dòng)切換
- 實(shí)例講解Android中ViewPager組件的一些進(jìn)階使用技巧
- 舉例講解Android中ViewPager中的PagerTitleStrip子控件
- Android App開(kāi)發(fā)中ViewPager組件的入門使用教程
- Android應(yīng)用中利用ViewPager實(shí)現(xiàn)多頁(yè)面滑動(dòng)切換效果示例
- Android中viewPager使用指南
- Android中ViewPager實(shí)現(xiàn)滑動(dòng)條及與Fragment結(jié)合的實(shí)例教程
相關(guān)文章
Android 有道詞典的簡(jiǎn)單實(shí)現(xiàn)方法介紹
本篇文章小編為大家介紹,Android 有道詞典的簡(jiǎn)單實(shí)現(xiàn)方法介紹。需要的朋友參考下2013-04-04
Android App中實(shí)現(xiàn)簡(jiǎn)單的刮刮卡抽獎(jiǎng)效果的實(shí)例詳解
這篇文章主要介紹了Android App中實(shí)現(xiàn)簡(jiǎn)單的刮刮卡抽獎(jiǎng)效果的實(shí)例詳解,文中主要借助Bitmap的canvas.drawPath的api來(lái)實(shí)現(xiàn),需要的朋友可以參考下2016-03-03
Android基于reclyview實(shí)現(xiàn)列表回彈動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了Android基于reclyview實(shí)現(xiàn)列表回彈動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android入門之使用eclipse進(jìn)行源碼開(kāi)發(fā)的方法
這篇文章主要介紹了Android入門之使用eclipse進(jìn)行源碼開(kāi)發(fā)的方法,較為詳細(xì)的分析了使用eclipse進(jìn)行Android源碼開(kāi)發(fā)的具體步驟與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-02-02
Android實(shí)現(xiàn)網(wǎng)絡(luò)圖片瀏覽器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)網(wǎng)絡(luò)圖片瀏覽器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
基于Android AppWidgetProvider的使用介紹
本篇文章小編為大家介紹,基于Android AppWidgetProvider的使用。需要的朋友參考下2013-04-04
Android開(kāi)發(fā)之超實(shí)用的系統(tǒng)管理工具類【SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等】
這篇文章主要介紹了Android開(kāi)發(fā)之超實(shí)用的系統(tǒng)管理工具類,涉及Android針對(duì)SD卡,網(wǎng)絡(luò),uri,屏幕,網(wǎng)絡(luò),軟鍵盤,文本,進(jìn)程等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02

