PagerSlidngTab用法(與ViewPager一起使用)
一 將PagerSlidingTab.java類考入項(xiàng)目 (將自定義屬性以及狀態(tài)選擇器一并拷入否則報(bào)錯(cuò))
二布局中:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/slidingtab"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
三代碼中:
1? ? ? viewpager = (ViewPager) findViewById(R.id.viewpager);//初始化ViewPager
slidingtab = (PagerSlidingTab) findViewById(R.id.slidingtab);//初始化PagerSlidingTab
2 給viewpager設(shè)置 adapter
//給viewpager設(shè)置Adapter
viewpager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
public class MainPagerAdapter extends FragmentPagerAdapter {
private? String[] tabs;//xml中的 標(biāo)簽組合
public MainPagerAdapter(FragmentManager fm) {
super(fm);
tabs = CommonUtil.getStringArray(R.array.tab_names);
}
//根據(jù)position返回對(duì)應(yīng)的Fragment
@Override
public Fragment getItem(int position) {
return FragmentFactory.create(position);
}
@Override
public int getCount() {
return tabs.length;
}
/**
* 獲取 position對(duì)應(yīng)的 title
*/
@Override
public CharSequence getPageTitle(int position) {
return tabs[position];
}
/**
*根據(jù)不同的位置 返回不同的圖片
*@paramposition
*@return
*/
/* @Override
public int getPageIconResId(int position) {
return R.mipmap.ic_download;
}*/
}
xml中數(shù)組的寫(xiě)法:
<string-array name="tab_names">
<item>首頁(yè)<item>
<item>應(yīng)用<item>
<item>游戲<item>
<item>專題<item>
<item>推薦<item>
<item>分類<item>
<item>分類<item>
<string-array>
3? ? //綁定viewpager和indector
slidingtab.setViewPager(viewpager);
4 PagerSlideTab內(nèi)部實(shí)現(xiàn)及擴(kuò)展
1.title如何添加的:在setViewPager方法中,獲取adapter的count,然后遍歷count,在遍歷過(guò)程中
動(dòng)態(tài)創(chuàng)建TextView,并且將adapter的getPagerTitle方法的返回值設(shè)置TextView;
最終將TextView添加到水平的LinearLayout中了;
2.如何跟隨ViewPager滾動(dòng):在setViewPager方法中,給pager設(shè)置OnPageChangeListener,在onPageScroll
方法中去計(jì)算需要滾動(dòng)的位置,最終調(diào)用scrollTo方法滾動(dòng);
3指示線? 位置? 以及 圓角? 背景顏色 設(shè)置(在onDraw方法中)
//繪制 在 下邊的線
canvas.drawRect(lineLeft, 0, lineRight, indicatorHeight, rectPaint);
//繪制在上邊的線
// canvas.drawRect(lineLeft, 0, lineRight, indicatorHeight, rectPaint);
//繪制在中間的線
// canvas.drawRect(lineLeft,height/2-indicatorHeight/2, lineRight, height/2+indicatorHeight/2, rectPaint);
//繪制滾動(dòng)的背景
// rectPaint.setColor(Color.parseColor("#66006BCE"));
// canvas.drawRect(lineLeft,0, lineRight, height, rectPaint);
//繪制滾動(dòng)的圓角背景
// RectF rect = new RectF(lineLeft, 0, lineRight, height);
// canvas.drawRoundRect(rect, 8, 8, rectPaint);
// draw underline
}
4指示器中 圖片替換文字的方法
adapter 實(shí)現(xiàn) IconTabProvider? 重寫(xiě)方法
public int getPageIconResId(int position) {
return R.mipmap.ic_download;
}
源碼中? setViewPager(viewpager)方法 中有判斷
if (pager.getAdapter() instanceof IconTabProvider) {
addIconTab(i, ((IconTabProvider) pager.getAdapter()).getPageIconResId(i));
} else {
addTextTab(i, pager.getAdapter().getPageTitle(i).toString());
}