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;  
         }  
     }  
  • 相关阅读:
    VOA 2009/11/02 DEVELOPMENT REPORT In Kenya, a Better Life Through Mobile Money
    2009.11.26教育报道在美留学生数量创历史新高
    Java中如何实现Tree的数据结构算法
    The Python Tutorial
    VOA HEALTH REPORT Debate Over New Guidelines for Breast Cancer Screening
    VOA ECONOMICS REPORT Nearly Half of US Jobs Now Held by Women
    VOA ECONOMICS REPORT Junior Achievement Marks 90 Years of Business Education
    VOA 2009/11/07 IN THE NEWS A Second Term for Karzai; US Jobless Rate at 10.2%
    Ant入门
    Python 与系统管理
  • 原文地址:https://www.cnblogs.com/java-g/p/4587999.html
Copyright © 2011-2022 走看看