标签:viewpagerindicator underlinepageindicat tabpageindicator 实现总结
这里主要论述了对TabPageIndicator和UnderLinePageIndicator两种界面的使用方式和总结:
开始我用的是ViewPager+Fragment 实现的app主界面,后来老师告诉我使用WPS的主界面布局方式效果可能会好一些~~~折腾了好几个小时总算是搞明白了TabPageIndicator 的用法,也写出了demo。。。。。。在实现的过程中让人蛋疼的是.9path图的问题,大家都知道eclipse对9path图的要求不是特别严格,这就导致了很多9path图转移到了studio上产生了无法解析图片的错误。汗!!!后来好不容易找到一个可以实现的图,然后发现除了style的定制略微繁琐之外,还让人有点接受不了的就是在VIewPager左右切换的时候,上边的指示器貌似没有过渡的效果......身为天蝎座却犯有处女座毛病的我,课余时间一直在查找过渡效果实现的方式。。。最后突然发现在ViewPagerIndicator开源库给的demo里有一个叫做UnderLinePage的demo居然可以具有过渡效果!!!惊喜!!!,虽然没有选项卡,只有一个光秃秃的指示条,但是这基本让我有了一丁点的想法!!!于是乎就......
看了看开源库的源码,发现UnderLinePagerIndicator的用法和TabPageIndicator的用法几乎一样,窃喜~~~然后照猫画虎的写了一个demo(可惜没有选项卡),紧接着发现我们之前在做ViewPager+Fragment实现的时候,那个联动效果是根据监听viewPager的onPageSelected()方法来实现的,哈哈~~~你懂的,然后我就同样写了一个装有选项卡的布局,然后一一监听,在监听的方法里对选项卡里的文字颜色进行联动变化即可达到目的!!!
这里贴出TabPageIndicator的主要源码:
<span style="font-size:14px;">public class Tabs extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view= inflater.inflate(R.layout.tabs,container,false);//最后一项为是否有父布局,设为false TextView content= (TextView) view.findViewById(R.id.tv); //savedInstanceState是自己保存下来的数据 Bundle bundle= getArguments(); String title= bundle.getString("arg");//从bundle里获取来自Activity的数据 content.setText(title); return view; } }</span>
<span style="font-size:14px;">package com.bob.indicatortab; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import com.viewpagerindicator.PageIndicator; public class MainActivity extends FragmentActivity { public static final String titles[]= {"新增","摆渡","我的"}; private ViewPager pager; private PageIndicator indicator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pager= (ViewPager) findViewById(R.id.pager); FragmentPagerAdapter adapter= new TabPageIndicatorAdapter(getSupportFragmentManager());//创建数据适配器 pager.setAdapter(adapter); indicator= (PageIndicator) findViewById(R.id.indicator);//核心代码其实就是这两句 indicator.setViewPager(pager);//将indicator和viewPager进行绑定 /*两种设置页面切换监听的方法 indicator.setOnPageChangeListener(); pager.setOnPageChangeListener();*/ } class TabPageIndicatorAdapter extends FragmentPagerAdapter{ public TabPageIndicatorAdapter(FragmentManager fm){//构造父类 super(fm); } @Override public Fragment getItem(int position) { Fragment fragment= new Tabs(); Bundle args= new Bundle(); args.putString("arg", titles[position]); fragment.setArguments(args);//为fragment添加bundle数据束args return fragment; } @Override public int getCount() { return titles.length; }//创建一个支持indicator的FragmentPagerAdapter适配器 @Override public CharSequence getPageTitle(int position) { return titles[position]; } } } </span>******************注意*******************
这里为了图方便,我把本应多个fragment实现的页面用一个fragment代替了,如果多个页面布局都一样的话,采用一个也未尝不可!!!
大家可以仔细观察观察,发现单纯使用TabPageIndicator其实是非常简单的,当然啦,让人稍微有点蛋疼的是它在style里配置indicator的参数以及9path图的问题,然后大家就可以使用类比的方法来实现UnderLinePageIndicator,加上一个布局和联动效果自然而然就可以达到我们想要的效果了!!! 联动效果的实现可以参考 我的这篇博客;
之所以不贴出UnderLinePageIndicator的源码,是为了让大家对我所说的认真思考思考,源码在下边的github里~~~
标签:viewpagerindicator underlinepageindicat tabpageindicator 实现总结
原文地址:http://blog.csdn.net/bob1993_dev/article/details/45441701