1. 程式人生 > >ViewPagerIndictor框架的使用(第一部分)

ViewPagerIndictor框架的使用(第一部分)

這兩天有徹底的玩了一遍ViewPageIndicator,網上有的博主的部落格很好。但是我覺得如果使用了一個框架缺什麼都不留下。下次又會重新來學習。這次記錄一次詳細的部落格。以備後用。

1.   下載

下載後有兩個工程:

Library是第三方庫,sample是簡單的演示工程。能夠看到各種樣式的效果。最好都匯入eclipse,注意在匯入的時候copy到工作空間。

2.   使用

執行sample後選擇自己想要的樣式。我覺得這些樣式可以分成三種:分別是簡單指示,文字tab提示,圖片提示。將逐個記錄。

樣式1)簡單提示

 這種樣式就是最簡單的用一下圓點,短線提示滑動的型別。像:

1.

2.

3

4.

這些提示就基本是用最簡單的幾何提示來提示滑動頁數。非常使用用了做歡迎介面或是app展示的介面。

使用的時候重點是理清各個之間的呼叫關係。

以第一種圓點提示為例:

1》佈局

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity"xmlns:app="http://schemas.android.com/apk/res/com.example.testpagerview">
   
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />
   
    <com.viewpagerindicator.CirclePageIndicator
        android:id="@+id/indicator"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:radius="10dp"
        app:pageColor="@android:color/darker_gray"
        app:fillColor="@android:color/holo_blue_light"
        app:strokeColor="#FFAA0000"
        app:strokeWidth="4dp"
        
        />
 
</LinearLayout>

基本都是這種上下佈局,上面是v4包中的viewPager,下面是要使用的Indicator,注意選擇自己想要的樣式。關於提示的細節樣式可以在自定義的屬性中修改。

2》相關的類:

相關的類有上個:相關的Activity(必須繼承FragmentActivity), CircleFragmentPagerAdapter(必須繼承FragmentPagerAdapter),CircleFragment(必須繼承Fragment———V4包)

使用方法:

1.   定義CircleFragment

Fragment中就按照一般的來進行定義(重寫onCreateView)就可以了,也可以複雜一些:

publicclassTestFragmentextends Fragment{
   //每次Fragment的儲存值
   privateintcontent;
   //每次儲存的鍵值對的鍵域
   privatestaticfinal StringCONTENT_KEY ="Content:key";
  
   //通過這個方法獲得TestFragment
   publicstatic FragmentnewInstance(int resId){
      TestFragment fragment = newTestFragment();
      fragment.content = resId;
      return fragment;
   }
  
   //在oncreate方法中獲取儲存的content
   @Override
   publicvoidonCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if(savedInstanceState!=null && savedInstanceState.containsKey(CONTENT_KEY)){
         content =savedInstanceState.getInt(CONTENT_KEY);
      }
   }
  
   //建立每次fragment的檢視
   @Override
   public ViewonCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
      ImageView view = newImageView(getActivity());
      view.setLayoutParams(newLayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));
      view.setBackgroundResource(content);
     
      return view;
   }
   //儲存鍵值對
   @Override
   publicvoidonSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
      outState.putInt(CONTENT_KEY,content);
   }
 
}

2.定義CircleFragmentPagerAdapter:

按照提示來改錯就可以了重寫的方法也非常簡單:

publicclassTestFragmentPagerAdapterextendsFragmentPagerAdapter{
 
   publicTestFragmentPagerAdapter(FragmentManager fm) {
      super(fm);
   }
   /**
    * 這個方法返回的是在需要像是index為position時需要顯示的fragment
    */
   @Override
   public Fragment getItem(int position){
      returnTestFragment.newInstance(Const.WELCOME_PAGER_IMAGES[position]);
   }
 
   /**
    * 這個方法返回的是一共需要顯示多少個fragment
    */
   @Override
   publicintgetCount() {
      return Const.WELCOME_PAGER_IMAGES.length;
   }
 
}
 

3.Activity中找的新增的兩個空間ViewPager和Indicator做以下操作:

      ViewPager.setAdapter(CircleFragmentPagerAdapter)

      Indicator.setViewPager(viewPager);

關聯關係:

Viewpager->FragmentPagerAdpater->Fragment

Indicator->viewPager

如下:

publicclassMainActivityextends FragmentActivity {
  
   private ViewPagerviewPager;
   private CirclePageIndicatorindicator;
   private FragmentPagerAdapteradapter;
 
    @Override
    protectedvoidonCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
       
        adapter =newTestFragmentPagerAdapter(getSupportFragmentManager());
        viewPager =(ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(adapter);
       
        indicator =(CirclePageIndicator) findViewById(R.id.indicator);
        indicator.setViewPager(viewPager);
       
    }
 
 
    @Override
    publicbooleanonCreateOptionsMenu(Menu menu) {
        // Inflate themenu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        returntrue;
    }
   
}
 


最後效果如下:有點醜,審美啊!

這種事所有Indicator使用的基本方式。其他兩種方式也是在這個上面新增的。一定要自己試驗一些。