zoukankan      html  css  js  c++  java
  • viewpagerindicator+UnderlinePageIndicator+ viewpage切换

    布局文件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;  
         }  
     }  
  • 相关阅读:
    JS模拟出 getElementsByClassName 功能
    如何为PDF文件添加书签
    Linux内核模块学习
    Linux字符设备驱动学习
    第53篇编译线程的初始化
    第51篇SharedRuntime::generate_native_wrapper()生成编译入口
    第50篇调用约定(2)
    第52篇即时编译器
    2021 阿里云容器服务年度盘点:企业级容器应用变化和技术趋势观察
    如何在零停机的情况下迁移 Kubernetes 集群
  • 原文地址:https://www.cnblogs.com/java-g/p/4587999.html
Copyright © 2011-2022 走看看