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中数组的写法:
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());
}