PagerSlidngTab用法(與ViewPager一起使用)
一 將PagerSlidingTab.java類考入項目 (將自定義屬性以及狀態選擇器一并拷入否則報錯)
二布局中:
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設置 adapter
//給viewpager設置Adapter
viewpager.setAdapter(new MainPagerAdapter(getSupportFragmentManager()));
public class MainPagerAdapter extends FragmentPagerAdapter {
private? String[] tabs;//xml中的 標簽組合
public MainPagerAdapter(FragmentManager fm) {
super(fm);
tabs = CommonUtil.getStringArray(R.array.tab_names);
}
//根據position返回對應的Fragment
@Override
public Fragment getItem(int position) {
return FragmentFactory.create(position);
}
@Override
public int getCount() {
return tabs.length;
}
/**
* 獲取 position對應的 title
*/
@Override
public CharSequence getPageTitle(int position) {
return tabs[position];
}
/**
*根據不同的位置 返回不同的圖片
*@paramposition
*@return
*/
/* @Override
public int getPageIconResId(int position) {
return R.mipmap.ic_download;
}*/
}
xml中數組的寫法:
<string-array name="tab_names">
<item>首頁<item>
<item>應用<item>
<item>游戲<item>
<item>專題<item>
<item>推薦<item>
<item>分類<item>
<item>分類<item>
<string-array>
3? ? //綁定viewpager和indector
slidingtab.setViewPager(viewpager);
4 PagerSlideTab內部實現及擴展
1.title如何添加的:在setViewPager方法中,獲取adapter的count,然后遍歷count,在遍歷過程中
動態創建TextView,并且將adapter的getPagerTitle方法的返回值設置TextView;
最終將TextView添加到水平的LinearLayout中了;
2.如何跟隨ViewPager滾動:在setViewPager方法中,給pager設置OnPageChangeListener,在onPageScroll
方法中去計算需要滾動的位置,最終調用scrollTo方法滾動;
3指示線? 位置? 以及 圓角? 背景顏色 設置(在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);
//繪制滾動的背景
// rectPaint.setColor(Color.parseColor("#66006BCE"));
// canvas.drawRect(lineLeft,0, lineRight, height, rectPaint);
//繪制滾動的圓角背景
// RectF rect = new RectF(lineLeft, 0, lineRight, height);
// canvas.drawRoundRect(rect, 8, 8, rectPaint);
// draw underline
}
4指示器中 圖片替換文字的方法
adapter 實現 IconTabProvider? 重寫方法
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());
}