Android 中 viewpager 滑动指示器的实例代码

先看下效果图:

这个需要用到1个开源的 库,这个后面也会说下的。

工程目录:

1. MainActivity.java

public class MainActivity extends FragmentActivity {
  private ViewPagerFrameAdapter adapter;  //适配器(标题和内容)
 private ViewPager mPager;
 private TabPageIndicator   tabbPageIndicator;   //
 private UnderlinePageIndicatorEx underlinePageIndicator;
 private int COUNT = 0;
 private List<String> titles = new ArrayList<String>(); //标题
 @Override
 protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    //标题,这里自己造的假数据
    for (int j = 0; j < 3 ; j++){
     titles.add( "第"+ j +"标签卡");
    }
    mPager = (ViewPager)findViewById(R.id.pager);
    adapter = new ViewPagerFrameAdapter(getSupportFragmentManager(),titles);
    mPager.setAdapter(adapter);
    //得到指示器
    tabbPageIndicator = (TabPageIndicator) findViewById(R.id.tab_indicator);
    tabbPageIndicator.setViewPager(mPager);
    //下标
    underlinePageIndicator = (UnderlinePageIndicatorEx)findViewById(R.id.underline_indicator);
    underlinePageIndicator.setViewPager(mPager);
    underlinePageIndicator.setFades(false);
    //设置指示器
    tabbPageIndicator.setOnPageChangeListener(underlinePageIndicator);
 }
 //adapter 没啥好说的 跟前面的一样
 private class ViewPagerFrameAdapter extends FragmentStatePagerAdapter{
  private List<String> title; //页面标题头部数据
  public ViewPagerFrameAdapter(FragmentManager fm, List<String> title) {
   super(fm);
   this.title = title;
  }
  //根据position 返回 fragment
  @Override
  public Fragment getItem(int position) {
   return ArrayFragment.newInstance(position);
  }
  //size
  @Override
  public int getCount() {
    return title.size();
  }
  //顶部的title
  @Override
  public CharSequence getPageTitle(int position) {
   if (titles != null){
    return titles.get(position).toString();
   }
   return super.getPageTitle(position);
  }
 }
} 

UnderlinePageIndicatorEx.java

//继承这个然后重写
public class UnderlinePageIndicatorEx extends UnderlinePageIndicator{
  public UnderlinePageIndicatorEx(Context context) {
   super(context, null);
  }
  public UnderlinePageIndicatorEx(Context context, AttributeSet attrs) {
   super(context, attrs, R.attr.vpiUnderlinePageIndicatorStyle);
  }
  public UnderlinePageIndicatorEx(Context context, AttributeSet attrs, int defStyle) {
   super(context, attrs, defStyle);
  }
  //自身的 ViewPage传递过去
  @Override
  public void setViewPager(ViewPager viewPager) {
   if (mViewPager == viewPager){
    return;
   }
//   if (mViewPager != null) {
//    mViewPager.setOnPageChangeListener(null);
//   }
   if (viewPager.getAdapter() == null) {
    throw new IllegalStateException(" pager 没有 加入 adapter");
   }
   mViewPager = viewPager;
//   mViewPager.setOnPageChangeListener(this);
   invalidate();
   post(new Runnable(){
    @Override public void run() {
     if (mFades) {
      post(mFadeRunnable);
     }
    }
   });
  }
} 

ArrayFragment.java

public class ArrayFragment extends Fragment{
 private int position;
 public ArrayFragment(int position){
  this.position = position;
 }
  // 返回 viwePager 下面滑动的页面
 public static ArrayFragment newInstance(int position){
  return new ArrayFragment(position);
 }
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
 }
 @Override
 public void onDestroy() {
  super.onDestroy();
 }
 // 根据position 返回不同的view
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
   Bundle savedInstanceState) {
  View view = inflater.inflate(R.layout.layoutaa, null);
  return view;
 }
} 

好了接下来是 布局xml了。

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  >
 <!-- 标题  和  标题下面的 指示器 -->
  <LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="35dp"
  android:orientation="vertical"
  android:background="@drawable/main_header_background">
    <com.viewpagerindicator.TabPageIndicator
     android:id="@+id/tab_indicator"
     android:layout_height="wrap_content"
     android:layout_width="fill_parent"/>
    <com.test.linepagerindictor.widget.UnderlinePageIndicatorEx
     android:id="@+id/underline_indicator"
     android:layout_height="3dip"
     android:layout_width="fill_parent"
     android:layout_alignParentBottom="true"/>
  </LinearLayout>
  <android.support.v4.view.ViewPager
  android:id="@+id/pager"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"/>
</LinearLayout> 

接下来设置 滑动指示器的style

<!-- 总 style 直接引用 这个 由 tab style 和 Indicator style 组成 -->
 <style name="StyledAllIndicators" parent="@android:style/Theme.Light">
  <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
  <item name="vpiUnderlinePageIndicatorStyle">@style/CustomUnderlinePageIndicator</item>
 </style>
 <!-- tab的 style -->
 <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator">
  <item name="android:background">#00000000</item>
  <item name="android:textAppearance">@style/CustomTabPageIndicator_text</item>
  <item name="android:textColor">@color/selector_tab</item>
  <item name="android:textSize">20sp</item>
  <!-- 分割线,可有可无的 -->
  <item name="android:divider">@drawable/custom_tab_indicator_divider</item>
  <item name="android:dividerPadding">10dip</item>
  <item name="android:showDividers">middle</item>
  <item name="android:paddingTop">4dp</item>
  <item name="android:paddingLeft">8dp</item>
  <item name="android:paddingBottom">4dp</item>
  <item name="android:paddingRight">8dp</item>
  <item name="android:fadingEdge">horizontal</item>
  <item name="android:fadingEdgeLength">8dp</item>
 </style>
 <style name="CustomTabPageIndicator_text" parent="android:TextAppearance.Medium">
  <item name="android:typeface">monospace</item>
 </style>
 <!-- 下标的指示器的颜色 -->
 <style name="CustomUnderlinePageIndicator">
  <item name="selectedColor">#EB5548</item>
  <item name="android:background">#00000000</item>
  <item name="fadeLength">1000</item>
  <item name="fadeDelay">1000</item>
 </style> 

selector_tab.xml     这个是 选择器 在style中引用的,是用来切换 被选中的背景色的

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_selected="true" android:color="#91D228" />
 <item android:state_focused="true" android:color="#91D228" />
 <item android:color="#dddddd" />
</selector> 
(0)

相关推荐

  • Android自定义ViewPager指示器

    本文实例为大家分享了Android ViewPager指示器的制作方法,供大家参考,具体内容如下 1.概述 ViewPageIndicator这个开源框架大家都接触过,个人感觉还不错就是用起来比较麻烦,需要这里配置那里配置效果定制起来也不方便.我第一次使用的时候就一直出不来效果,后来找了很久发现是activity的主题没有配置好.今天我们自己来造个轮子实现一把,其中用到了Adapter模式,如果不清楚这个模式的请看我的Android源码设计模式分析:http://www.jb51.net/art

  • Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件

    最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView. 特点: 1.可以轮播view可以自己定义,不一定是要是ImageView2.指示器默认显示,但是可以隐藏3.可以设置指示器的颜色.间距.大小 4.有基础的可以自己修改代码改变指示器位置,这个应该不难5.可以自己开启和关闭自动轮播,开启轮播的时候可以设置轮播时间间隔,默认3000毫秒 我们先来看看效果图: 然后来看看使用代码 xml代码 <?xml version

  • Android实现带指示器的自动轮播式ViewPager

    前言 最近在做项目的时候,有个需求就是实现自动轮播式的ViewPager,最直观的例子就是知乎日报顶部的ViewPager,它内部有着好几个子view,每个一段时间便自动滑动到下一个item view,而底部的指示器也随之跟着改变.使用这种ViewPager的好处是在有限的空间内可以展示出多样化的信息.轮播式ViewPager广泛应用于各种应用内部,用于展示广告等.抱着学习和分享的目的,笔者把轮播式ViewPager写成了一个独立的控件,以方便以后的使用. 效果展示 话不多说,我们先来看看实现的

  • Android开发实现的ViewPager引导页功能(动态加载指示器)详解

    本文实例讲述了Android开发实现的ViewPager引导页功能(动态加载指示器).分享给大家供大家参考,具体如下: 先看效果图咯~ 现在几乎每个App都会有引导页,是不是感觉很炫很厉害,所以就想做出来一个学习一下~让自己的App看起来更加的美观~ 现在来分析一下: 这个引导页可以分为俩部分~ 1.小红点--来提醒这是第几页了~ 2."开始体验"这个Button--可以进入主界面,但是要控制这个Button只能在最后一页出现 布局的话使用相对布局~ 那现在来看看布局吧: activi

  • Android应用中使用ViewPager和ViewPager指示器来制作Tab标签

    一.ViewPageIndicator开源框架的基本用法 我们先得去Github上面下载这个库,下载地址:https://github.com/JakeWharton/Android-ViewPagerIndicator,下载下来之后你可以运行例子,来看看我们需要什么样的效果,然后在此基础上改成我们自己想要的效果 1.如何使用开源框架 第1步:improt library项目 第2步:导入library进我们自己新建的项目 从Github上Download下来这个zip包之后,里面会有一个lib

  • Android自定义View Flyme6的Viewpager指示器

    最新更新的Flyme6整体效果不错,动画效果增加了很多了,看了看flyme6的Viewpager指示器,觉得有点意思,就模仿写了一下,整体效果如下: Gradle JitPack v1.0.2 allprojects { repositories { maven { url 'https://jitpack.io' } } } dependencies { compile 'com.github.Dawish:FlymeTabStrip:v1.0.2' } Attrs <declare-styl

  • Android应用中仿今日头条App制作ViewPager指示器

    一.概述 顶部ViewPager指示器的字体变色,该效果图是这样的: 大概是今天头条的app,神奇的地方就在于,切换ViewPager页面的时候,顶部指示器改成了字体颜色的变化,个人觉得还是不错的. 那么核心的地方就是做一个支持字体这样逐渐染色就可以了,我大概想了32s,扫描了一些可能实现的方案,最终定位了一个靠谱的,下面我就带大家开始实现的征程. 实现之前贴一下我们的效果图: 1.简单使用 效果如上图了,关于颜失色的改变我添加了两个方向,一个是左方向,一个是有方向. 单纯的使用,可能觉得没什么

  • Android自定义ViewPagerIndicator实现炫酷导航栏指示器(ViewPager+Fragment)

    ViewPagerIndicator导航栏指示器运行效果: 实现这个效果,我是看了很多大神写的博客和视频后自己敲的,欢迎指正 github地址:https://github.com/dl10210950/TabViewPagerIndicator 自定义一个ViewPagerIndicator 自定义一个Indicator继承LinearLayout,在构造方法里面设置画笔的一些属性 public ViewPagerIndicator(Context context, AttributeSet

  • TabLayout实现ViewPager指示器的方法

    在TabLayout出现之前,基本都是通过 ViewPager+FragmentPagerAdapter+第三方开源tab指示器(TabPageIndicator)来实现的.现在Android内部提供了现成的TabLayout控件来实现ViewPager指示器的效果. 先看效果图: 导入依赖 在Gradle文件中导入依赖,代码如下: compile 'com.android.support:design:23.4.0' TabLayout类就在这个依赖包中定义的. 布局文件中使用 <Linear

  • Android 中 viewpager 滑动指示器的实例代码

    先看下效果图: 这个需要用到1个开源的 库,这个后面也会说下的. 工程目录: 1. MainActivity.java public class MainActivity extends FragmentActivity { private ViewPagerFrameAdapter adapter; //适配器(标题和内容) private ViewPager mPager; private TabPageIndicator tabbPageIndicator; // private Unde

  • Android 实现ViewPager边界回弹效果实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: public class BounceBackViewPager extends ViewPager { private int currentPosition = 0; private Rect mRect = new Rect();//用来记录初始位置 private boolean handleDefault = true; private float preX = 0f; private static final float RATI

  • Android中实现图文并茂的按钮实例代码

    效果图如下所示: 代码: <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:gravity="center" android:background="#8

  • Android实现双向滑动特效的实例代码

    记得在很早之前,我写了一篇关于Android滑动菜单的文章,其中有一个朋友在评论中留言,希望我可以帮他将这个滑动菜单改成双向滑动的方式.当时也没想花太多时间,简单修改了一下就发给了他,结果没想到后来却有一大批的朋友都来问我要这份双向滑动菜单的代码.由于这份代码写得很不用心,我发了部分朋友之后实在不忍心继续发下去了,于是决定专门写一篇文章来介绍更好的Android双向滑动菜单的实现方法. 在开始动手之前先来讲一下实现原理,在一个Activity的布局中需要有三部分,一个是左侧菜单的布局,一个是右侧

  • android实现ViewPager的Indicator的实例代码

    虽然在android5.0中design中有了TabLayout来实现ViewPager的Indicator,简单好用.但这个是我自己实现的,学习了很多,记录在这里.效果图: 第一步 新建一个类继承LinearLayout,用来绘制指示器,及提供Viewpager滑动时重绘指示器的方法: public class ViewPagerIndicator extends LinearLayout{ //画笔 private Paint mPaint; //用来画一条线 private Path mP

  • Android 中对JSON数据解析实例代码

    Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&

  • Android中自定义对话框(Dialog)的实例代码

    1.修改系统默认的Dialog样式(风格.主题) 2.自定义Dialog布局文件 3.可以自己封装一个类,继承自Dialog或者直接使用Dialog类来实现,为了方便以后重复使用,建议自己封装一个Dialog类 第一步: 我们知道Android定义个控件或View的样式都是通过定义其style来实现的,查看Android框架中的主题文件,在源码中的路径:/frameworks/base/core/res/res/values/themes.xml,我们可以看到,Android为Dialog定义了

  • Android中加入名片扫描功能实例代码

    要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻云名片识别服务.他们的官方网站为http://www.maketion.com/. 一.概述 Maketion ScanCardSDK(以下简称SDK)是提供给第三方合作伙伴接入脉可寻云名片识别服务,合作伙伴需要先申请key和secure才可以使用. SDK不能独立运行,使用时需要嵌入到Android的Project中. SDK支持Android2.1版本及

  • Android中布局保存成图片实例代码

    一.前言 有一个朋友问做过截屏的小功能没,自己没有做过.但是想了一下,实现的过程.实现截屏就是为了截取咱们应用中的部分布局,然后实现将保存在本地,或将其分享,或将其通过第三方的平台分享出去.自己可能是受了截屏这两个字的影响,想当然的去梳理自己的实现思路. 1:截屏,调用系统的截屏功能区实现截屏. 2:对图片进行处理:截屏是截取的手机的全屏,因为我们是需要截取我们的应用的某一部分,所以我们需要去通过剪切裁剪,去裁剪出自己想要保留的一部分(实质也就是保存布局). 3:后续也许还要处理系统截屏功能本身

  • Android中EditText禁止输入表情的实例代码

    最近在做的项目中用户编辑资料的时候不希望用户输入表情,如果用户输入表情的话上传给后台要报错,所以需要我们前端做一个判断.下面就来说一下怎么在EditText中屏蔽表情吧. 网上有很多这样的列子但是一不小心就会掉进坑里面,比如继承EditText,重写addTextChangedListener()方法.可能当时你测试的时候没有什么问题,但是项目上线后就会有很多问题,错误率很高,但是查看友盟后台的时候好像是截取字符串长度方面的错误.所以建议大家不要使用那个方法了. 因为上面的方法不行,肯定要想其他

随机推荐