布局文件activity_main.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="wrap_content"
android:orientation="vertical" >
<com.viewpagerindicator.TabPageIndicator //导航标题
android:id="@+id/tab_indicator"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<com.jimaisong.deliver.UnderlinePageIndicatorEx  //下滑线
android:id="@+id/underline_indicator"
android:layout_width="fill_parent"
android:layout_height="3dip"
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>

第二步     MainActivity.java的代码

public class MainActivity extends FragmentActivity {

    private ViewPagerFrameAdapter adapter; // 适配器(标题和内容)
private ViewPager mPager; private TabPageIndicator tabbPageIndicator; // 得到指示器
private UnderlinePageIndicatorEx underlinePageIndicator;//下标线 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); // //绑定
underlinePageIndicator.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Toast.makeText(getApplicationContext(), titles.get(position).toString() , 1).show(); }
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub }
}); } // 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);
}
} }

MainActivity.java 的样式

<!-- 总 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">@drawable/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">14dp</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingBottom">14dp</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">#FFCC0000</item> //下标的颜色
<item name="android:background">#FFCCCCCC</item> //下标后面的背景色
<item name="fadeLength">1000</item>
<item name="fadeDelay">1000</item>
</style>

selector_tab.xml

<?xml version="1.0" encoding="utf-8"?>  

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#FFCC0000" /> //红色
<item android:state_focused="true" android:color="#FFCC0000" />
<item android:color="#FF000000" /> //黑色
</selector>

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;
}
}

viewpagerindicator+UnderlinePageIndicator+ viewpage切换的更多相关文章

  1. android切换卡顿解决方法

    如果想要让应用用户流畅的滑动体验的话,那么就必须对activity和fragment的生命周期有一个完整的概念以及在何种情况下会触发哪些事件. 在自己目前做的项目中,就遇到了这样的问题,那么就把自己的 ...

  2. Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)

    学习内容来自“慕课网” 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换的时候添加切换动画效果 先看布局文件 activity_main.layout <?xml versi ...

  3. 自定义View(二)ViewPage广告轮播

    自定义View的第二个学习案例,使用ViewPage实现广告轮播,通过组合现有的View实现效果如下: 有关ViewPage使用可以学习谷歌官方API,和训练案例: 1.使用ViewPage实现屏幕滑 ...

  4. Android Studio精彩案例(二)《仿微信动态点击底部tab切换Fragment》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 现在很多的App要么顶部带有tab,要么就底部带有tab.用户通过点击tab从而切换不同的页面(大部分情况时去切换fragment). ...

  5. Android-ViewPagerIndicator框架使用——UnderlinePageIndicator

    前言:UnderlinePageIndicator这个指示,是一个很小巧的东西,简单,没有那么多复杂的效果. 一:布局定义simple_underlines: <LinearLayout xml ...

  6. 实现可以滑动的GrildView,类似美团网首页的GrildView功能菜单

    首先上实现效果图,不会做动态图,就先凑合着看吧 使用了网上的一个开源控件viewpagerindicator,可以自定义切换时候显示的标记,圆点,或者下划线. GrildView显示的是手机上的全部a ...

  7. 仿Android网易新闻客户端,并增加水平图片滑动,改进阅读体验

    仿网易新闻Android端APP 主要功能展示和代码实现 差不多花了一周的时间,目前实现的了新闻下的包括头条.体育.娱乐的一系列的新闻展示,以及点击后进入的新闻详情展示. 目前效果 目前效果请访问该网 ...

  8. Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡

     <Android ViewPager实现Tabhost选项卡底部滑块动态滑动过渡> 之前基于github上的第三方开源控件ViewPagerIndicator的UnderlinePa ...

  9. Android开源代码分享

    一.AppMsg实现自定义Toast. github下载地址 二.CircleImageView实现带边框圆形头像.                               github下载地址 ...

随机推荐

  1. python如何获取多个excel单元格的值

    一. 获取多个单元格的值报错:AttributeError: 'tuple' object has no attribute 'value' 需要读取的sample.xlsx 代码读取的是A3:B10 ...

  2. poj2396有源汇上下界可行流

    题意:给一些约束条件,要求算能否有可行流,ps:刚开始输入的是每一列和,那么就建一条上下界相同的边,这样满流的时候就一定能保证流量相同了,还有0是该列(行)对另一行每个点都要满足约束条件 解法:先按无 ...

  3. node.js 操作excel

    首先安装依赖库node-xlsx npm install node-xlsx 在操作文件中直接引用 var xlsx = require("node-xlsx"); 读取excel ...

  4. mysql分组取topn

    本文来自  http://www.jb51.net/article/31590.htm 有些语句sql top n 是sqlserver语法 --按某一字段分组取最大(小)值所在行的数据 代码如下: ...

  5. Django 基础 视图系统

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  6. New Concept English three (48)

    23w/m 76errors In this much-travelled world, there are still thousands of places which are inaccessi ...

  7. asp.net core mcroservices 架构之 分布式日志(一)

    一 简介 无论是微服务还是其他任何分布式系统,都需要一个统一处理日志的系统,这个系统 必须有收集,索引,分析查询的功能.asp .net core自己的日志是同步方式的,正如文档所言: 所以必须自己提 ...

  8. LeetCode Repeated String Match

    原题链接在这里:https://leetcode.com/problems/repeated-string-match/description/ 题目: Given two strings A and ...

  9. How To Uninstall Software Using The Ubuntu Command Line

    How To Uninstall Software Using The Ubuntu Command Line Uninstall Ubuntu Software Using The Terminal ...

  10. MongoDb学习网站

    http://www.runoob.com/mongodb/mongodb-window-install.html