ViewPager指针项目,在使用ViewPager的时候能够指示ViewPager所在的位置,就像Google Play中切换的效果一样,还能使用在应用初始化的介绍页面

1. 引入ViewPagerIndicator库
2. 编写布局文件

         <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

3. mIndicator.setViewPager(mViewPager);//将viewpager和mIndicator关联起来,必须在viewpager设置完adapter后才能调用

4. 重写PagerAdapter方法,返回页面标题

        /**
         * 重写此方法,返回页面标题,用于viewpagerIndicator的页签显示
         */
        @Override
        public CharSequence getPageTitle(int position) {
            return mNewsTabData.get(position).title;
        }

5. 自定义样式修改
运行程序会发现界面是黑的,因为这个主题就是黑的,所以在main_activity.xml文件中修改成白色
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:id="@+id/fl_content"
  3. android:background="#fff"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent" >
  6. </FrameLayout>

1.加上主题,ViewPagerIndicator就是这个主题,这个主题也是ViewPagerIndicator里边的,因为关联了,所以能用
  1. <activity
  2. android:name=".MainActivity"
  3. android:theme="@style/Theme.PageIndicatorDefaults" />
2.修改主题,运行程序会发现几个页面不是自己想要的
  1. <style name="Theme.PageIndicatorDefaults" parent="android:Theme">
  2. <item name="vpiIconPageIndicatorStyle">@style/Widget.IconPageIndicator</item>
  3. <item name="vpiTabPageIndicatorStyle">@style/Widget.TabPageIndicator</item>
  4. </style>
主题用的是选择器,修改选择器,第一个是图标,第二个是标签,修改第二个
  1. <style name="Widget.TabPageIndicator" parent="Widget">
  2. <item name="android:gravity">center</item>
  3. <item name="android:background">@drawable/vpi__tab_indicator</item>
  4. <item name="android:paddingLeft">22dip</item>
  5. <item name="android:paddingRight">22dip</item>
  6. <item name="android:paddingTop">12dp</item>
  7. <item name="android:paddingBottom">12dp</item>
  8. <item name="android:textAppearance">@style/TextAppearance.TabPageIndicator</item>
  9. <item name="android:textSize">16sp</item>
  10. <item name="android:textColor">@drawable/vpi__tab_text_color_indicator</item>//在下面加了横线
  11. <item name="android:maxLines">1</item>
  12. </style>
可以修改颜色和背景,可是根据自己需求修改,修改第一个,比如:
  1. <!-- Non focused states -->
  2. <item android:state_focused="false" android:state_pressed="false" android:state_selected="false" android:color="#000"/>
  3. <item android:state_focused="false" android:state_pressed="false" android:state_selected="true" android:color="#f00"/>

菜单详情页-新闻  
  1. public class NewsMenuDetailPager extends BaseMenuDetailPager implements
  2. OnPageChangeListener {
  3. private ViewPager mViewPager;
  4. private ArrayList<TabDetailPager> mPagerList;
  5. private ArrayList<NewsTabData> mNewsTabData;// 页签网络数据
  6. private TabPageIndicator mIndicator;
  7. public NewsMenuDetailPager(Activity activity,
  8. ArrayList<NewsTabData> children) {
  9. super(activity);
  10. mNewsTabData = children;
  11. }
  12. @Override
  13. public View initViews() {
  14. View view = View.inflate(mActivity, R.layout.news_menu_detail, null);
  15. mViewPager = (ViewPager) view.findViewById(R.id.vp_menu_detail);
  16. ViewUtils.inject(this, view);
  17. mIndicator = (TabPageIndicator) view.findViewById(R.id.indicator);
  18. // mViewPager.setOnPageChangeListener(this);//注意:当viewpager和Indicator绑定时,
  19. // 滑动监听需要设置给Indicator而不是viewpager
  20. mIndicator.setOnPageChangeListener(this);
  21. return view;
  22. }
  23. @Override
  24. public void initData() {
  25. mPagerList = new ArrayList<TabDetailPager>();
  26. // 初始化页签数据
  27. for (int i = 0; i < mNewsTabData.size(); i++) {
  28. TabDetailPager pager = new TabDetailPager(mActivity,
  29. mNewsTabData.get(i));
  30. mPagerList.add(pager);
  31. }
  32. mViewPager.setAdapter(new MenuDetailAdapter());
  33. mIndicator.setViewPager(mViewPager);// 将viewpager和mIndicator关联起来,必须在viewpager设置完adapter后才能调用
  34. }
  35. // 跳转下一个页面
  36. @OnClick(R.id.btn_next)
  37. public void nextPage(View view) {
  38. int currentItem = mViewPager.getCurrentItem();
  39. mViewPager.setCurrentItem(++currentItem);
  40. }
  41. class MenuDetailAdapter extends PagerAdapter {
  42. /**
  43. * 重写此方法,返回页面标题,用于viewpagerIndicator的页签显示
  44. */
  45. @Override
  46. public CharSequence getPageTitle(int position) {
  47. return mNewsTabData.get(position).title;
  48. }
  49. @Override
  50. public int getCount() {
  51. return mPagerList.size();
  52. }
  53. @Override
  54. public boolean isViewFromObject(View arg0, Object arg1) {
  55. return arg0 == arg1;
  56. }
  57. @Override
  58. public Object instantiateItem(ViewGroup container, int position) {
  59. TabDetailPager pager = mPagerList.get(position);
  60. container.addView(pager.mRootView);
  61. pager.initData();
  62. return pager.mRootView;
  63. }
  64. @Override
  65. public void destroyItem(ViewGroup container, int position, Object object) {
  66. container.removeView((View) object);
  67. }
  68. }
  69. @Override
  70. public void onPageScrollStateChanged(int arg0) {
  71. }
  72. @Override
  73. public void onPageScrolled(int arg0, float arg1, int arg2) {
  74. }
  75. @Override
  76. public void onPageSelected(int arg0) {
  77. System.out.println("onPageSelected:" + arg0);
  78. MainActivity mainUi = (MainActivity) mActivity;
  79. SlidingMenu slidingMenu = mainUi.getSlidingMenu();
  80. if (arg0 == 0) {//只有在第一个页面(北京), 侧边栏才允许出来
  81. slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
  82. } else {
  83. slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
  84. }
  85. }
  86. }


7.ViewPagerIndicator的更多相关文章

  1. Android之实现ViewPagerIndicator

    PS:最近一直忙于学习任务,一直没有时间去写博客.今天周六,终于有时间了. 学习任务: 1.打造一个自己的ViewPagerIndicator   最近被安排了一大堆的学习任务,感觉老板还是很好的,让 ...

  2. 老猪带你玩转android自定义控件一——打造最简单viewpagerindicator

    viewpagerindicator,既使用viewpager翻页时候,标题的指示条随着改变的控件,是常用android控件之一,几乎所有的新闻类APP中都有使用.如下图所示: 今天,我们将从0到1实 ...

  3. Android stuido viewpagerindicator的使用

    Top Level Build.gradle buildscript { repositories { maven { url "http://dl.bintray.com/populov/ ...

  4. android 项目学习随笔七(ViewPagerIndicator与ViewPager)

    1.ViewPagerIndicator https://github.com/JakeWharton/ViewPagerIndicator package com.viewpagerindicato ...

  5. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

    转载  转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23513993 本来准备下载个CSDN的客户端放手机上,没事可以浏览浏览资 ...

  6. android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现

    ## ViewPagerIndicator ## 使用导入ViewPagerIndicator库的方式相当于可以改源码,打包编译Eclips可以自动完成. ViewPager指针项目,在使用ViewP ...

  7. 开源控件ViewPagerIndicator学习

    导航条指示器.ViewPagerIndicator 地址 https://github.com/JakeWharton/ViewPagerIndicator Style是重用控件的一种技术.类似CSS ...

  8. ViewPagerindicator 源码解析

        ViewPagerindicator 源码解析   1. 功能介绍 1.1 ViewPagerIndicator ViewPagerIndicator用于各种基于AndroidSupportL ...

  9. Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI

    1.概述 哈,今天给大家带来一个ViewPagerIndicator的制作,相信大家在做tabIndicator的时候,大多数人都用过 TabPageIndicator,并且很多知名APP都使用过这个 ...

  10. 开源框架ViewPagerIndicator的使用——TabPageIndicator

    1.导入Android-ViewPagerIndicator库文件 下载地址:https://github.com/JakeWharton/ViewPagerIndicator 2.布局文件     ...

随机推荐

  1. 2019最新整理PHP面试题附答案

    1.什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2.SESSION 与 COOKIE的区别是什么,请从协议, ...

  2. jquery中的 deferred之 deferred对象 (一)

    案例: var def=$.Deferred(); console.log(def);//答案见 图1 图1: deferred就是一个有这些方法的对象. 看源码分析: Deferred: funct ...

  3. CSS 图像大小

    CSS 图像大小 虽然在HTML中,img标签有属性height.width设置高和宽,在工作中却使用得非常少,通常使用CSS来控制大小. 给盒子设置属性height.width限制大小.单位通常是像 ...

  4. springcloud流程图

    自己画的: 别人画的 别人画的2

  5. 即时通信 选择UDP还是TCP协议

    之前做过局域网的聊天软件,现在要做运行在广域网的聊天软件.开始接触网络编程,首先是接触到TCP和UDP协议 在网上查资料,都是这样描述 TCP面向连接,可靠,数据流 .UDP无连接,不可靠,数据报.但 ...

  6. Pushlet实现后台信息推送(一)

    Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...

  7. PhoenixFD插件流体模拟——UI布局【Resimulation】详解

    Liquid Resimulation 流体再(重)渲染 本文主要讲解Resimulation折叠栏中的内容 主要内容 Overview 综述 Parameters 参数 综述 Liquid Resi ...

  8. Flask最强攻略 - 跟DragonFire学Flask - 第三篇 Flask 中的 request 之 先知道有这么个东西

    每个框架中都有处理请求的机制(request),但是每个框架的处理方式和机制是不同的 为了了解Flask的request中都有什么东西,首先我们要写一个前后端的交互 基于HTML + Flask 写一 ...

  9. 搭建中小规模集群之rsync数据同步备份

    NFS重要问题 1.有关NFS客户端普通用户写NFS的问题. 1)为什么要普通用户写NFS. 2)exports加all_squash. Rsync介绍 什么是Rsync? Rsync是一款开源的.快 ...

  10. 探索未知种族之osg类生物---渲染遍历之Renderer简介

    我们继续renderingTraversals()的探究.我们接着上一节的”阻塞渲染线程”后就要遍历所有摄像机的渲染器(Renderer),执行 Renderer::cull 场景筛选的操作.我们在r ...