前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 中 viewpager 滑动指示器的实例代码

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

作者头像
砸漏
发布2020-10-28 18:59:38
7130
发布2020-10-28 18:59:38
举报
文章被收录于专栏:恩蓝脚本

先看下效果图:

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

工程目录:

1. MainActivity.java

代码语言:javascript
复制
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

代码语言:javascript
复制
//继承这个然后重写 
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

代码语言:javascript
复制
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了。

代码语言:javascript
复制
<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

代码语言:javascript
复制
<!-- 总 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中引用的,是用来切换 被选中的背景色的

代码语言:javascript
复制
<?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  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档