① 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)