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());

}

更多相关文章

  1. 指定浏览器访问指定页面(支持UC、Opera、QQ、Dolphin、Skyfire、
  2. android Exid 不可修改
  3. Google Maps API Key申请方法及地址
  4. Android数据库操作的两种方式
  5. android 笔记 --- Android(安卓)Bitmap 建立或取得的方法
  6. Android自带Music播放器更新播放时间和进度条的方法
  7. Android类加载器ClassLoader
  8. Android硬件访问服务-Service
  9. 详解 Android(安卓)的 Activity 组件

随机推荐

  1. sqlserver 触发器学习(实现自动编号)
  2. SQL Server 总结复习(一)
  3. Sql Server 2012 分页方法分析(offset an
  4. SQL server高级应用 收藏版
  5. 优化 SQL Server 索引的小技巧
  6. SqlServer 索引自动优化工具
  7. sqlserver 查询数据库大小的方法
  8. SQL Server 数据页缓冲区的内存瓶颈分析
  9. SQL处理多级分类,查询结果呈树形结构
  10. sql 存储过程批量删除数据的语句