美文网首页
Viewpager Indicator中PagerSlidng

Viewpager Indicator中PagerSlidng

作者: 萱生活 | 来源:发表于2016-12-06 19:04 被阅读0次

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

    }

    相关文章

      网友评论

          本文标题: Viewpager Indicator中PagerSlidng

          本文链接:https://www.haomeiwen.com/subject/vxbrmttx.html