① ViewPager類直接繼承了ViewGroup類,所有它是一個容器類,可以在其中添加其他的view類。
② ViewPager類需要一個PagerAdapter適配器類給它提供數據。
③ ViewPager經常和Fragment一起使用,並且提供了專門的FragmentPagerAdapter和FragmentStatePagerAdapter類供Fragment中的ViewPager使用。
在編寫ViewPager的應用的使用,還需要使用兩個組件類分別是PagerTitleStrip類和PagerTabStrip類,PagerTitleStrip類直接繼承自ViewGroup類,而PagerTabStrip類繼承PagerTitleStrip類,所以這兩個類也是容器類。但是有一點需要注意,在定義XML的layout的時候,這兩個類必須是ViewPager標簽的子標簽,不然會出錯。
activity_main.xml
<RelativeLayout xmlns: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" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content"> <android.support.v4.view.PagerTabStrip android:id="@+id/viewpager_tab" android:layout_width="wrap_content" android:layout_height="50dp" android:background="#ffe66f" > </android.support.v4.view.PagerTabStrip> </android.support.v4.view.ViewPager> </RelativeLayout>
MainActivity.java
里面有很詳細的注釋,我就不在這贅述了.
package com.example.administrator.viewpagerdemo; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.PagerTabStrip; import android.support.v4.view.PagerTitleStrip; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private ViewPager viewPager = null; private PagerTabStrip pagerTabStrip = null; //導航條 private List<View> viewContainter = new ArrayList<View>(); //存放容器 private List<String> tabContainter = new ArrayList<String>(); //存放 tab導航 private ViewPagerAdapter viewPagerAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 綁定組件 viewPager = (ViewPager) findViewById(R.id.viewpager); pagerTabStrip = (PagerTabStrip) findViewById(R.id.viewpager_tab); pagerTabStrip.setTextColor(getResources().getColor(R.color.black)); //設置 字體顏色 //取消Tab 下面的長橫線 pagerTabStrip.setDrawFullUnderline(false); //設置每個Tab的下划線顏色 pagerTabStrip.setTabIndicatorColor(getResources().getColor(R.color.red)); pagerTabStrip.setTextSize(0,40); pagerTabStrip.setTextSpacing(10); //建立四個view的樣式,並找到他們 View view_1 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_1,null); View view_2 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_2,null); View view_3 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_3,null); View view_4 = LayoutInflater.from(getApplicationContext()).inflate(R.layout.viewpager_view_4,null); //加入ViewPage的容器 viewContainter.add(view_1); viewContainter.add(view_2); viewContainter.add(view_3); viewContainter.add(view_4); //想Tab容器中加入標簽 tabContainter.add("最近"); tabContainter.add("今天"); tabContainter.add("明天"); tabContainter.add("后天"); //初始化viewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(); //設置adapter viewPager.setAdapter(viewPagerAdapter); } //viewpager的適配器 private class ViewPagerAdapter extends PagerAdapter{ //該方法 決定 並 返回 viewpager中組件的數量 @Override public int getCount() { return viewContainter.size(); } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } //滑動切換的時候,消除當前組件 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(viewContainter.get(position)); } //每次滑動的時候生成的組件 @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(viewContainter.get(position)); return viewContainter.get(position); } //設置Tab @Override public CharSequence getPageTitle(int position) { return tabContainter.get(position); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
我們還需要建立四個View的布局文件,里面就放了一個ImageView,並且指定了背景,在這里我就貼出來一個布局文件的代碼(其他的都一樣)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/viewpager_view_image_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/image1"/> </LinearLayout>
效果圖:
對於PagerAdapter類,android的文檔已經說的很清楚了,必須至少實現如下的4個方法,如果需要更好的擴展也可以實現更多的方法。
public Object instantiateItem(ViewGroup container, int position)
public void destroyItem(ViewGroup container, int position,Object object)
public int getCount()
public boolean isViewFromObject(View arg0, Object arg1)