① ViewPager類直接繼承了ViewGroup類,全部它是一個容器類,能夠在其中添加其餘的view類。java
② ViewPager類須要一個PagerAdapter適配器類給它提供數據。android
③ ViewPager常常和Fragment一塊兒使用,而且提供了專門的FragmentPagerAdapter和FragmentStatePagerAdapter類供Fragment中的ViewPager使用。app
在編寫ViewPager的應用的使用,還須要使用兩個組件類分別是PagerTitleStrip類和PagerTabStrip類,PagerTitleStrip類直接繼承自ViewGroup類,而PagerTabStrip類繼承PagerTitleStrip類,因此這兩個類也是容器類。可是有一點須要注意,在定義XML的layout的時候,這兩個類必須是ViewPager標籤的子標籤,否則會出錯。ide
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字體
裏面有很詳細的註釋,我就不在這贅述了.this
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,而且指定了背景,在這裏我就貼出來一個佈局文件的代碼(其餘的都同樣)spa
<?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>
效果圖:code
對於PagerAdapter類,android的文檔已經說的很清楚了,必須至少實現以下的4個方法,若是須要更好的擴展也能夠實現更多的方法。xml
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)