ViewPager中文为页卡。能够实现视图的滑动效果,它需要和PagerAdapter一起使用,PagerAdapter是在ViewPager切换视图时提供给它一些数据和数据的管理。
视图滑动的效果需要三个步骤实现:
1:在布局文件中创建
<android.support.v4.view.ViewPager
android:id="@+id/vpMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>此标签。
注意:此标签的位置是根据自己的需求来给定它的位置的,可以自己决定切换的位置和切换区域的大小。
<pre name="code" class="html"><LinearLayout 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"
android:orientation="vertical"
>
<TextView
android:id="@+id/tvText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="手机滑屏"
android:textSize="30sp"/>
<!-- 切换视图区域-->
<android.support.v4.view.ViewPager
android:id="@+id/vpMain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
2:创建要切换的布局文件
3:在Activity中加载布局文件,用ViewPager.setPagerAdapter(PagerAdapter的对象);来关联页面管理器。使用LayoutInflater类来加载布局文件。
package com.example.huadong;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.os.Bundle;
public class MainActivity extends ActionBarActivity {
//定义一个队列来保存各个布局文件
ArrayList<View> list_view= new ArrayList<View>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
//初始化页卡对象
ViewPager mainview =(ViewPager) findViewById(R.id.vpMain);
//获取界面的布局加载器,将布局文件加载到程序中
LayoutInflater inflater=getLayoutInflater();
//第二种方式: inflater=LayoutInflater.from(this);
//将布局加载到程序中
View first =inflater.inflate(R.layout.first, null);
View second=inflater.inflate(R.layout.second, null);
View three =inflater.inflate(R.layout.three, null);
list_view.add(first);
list_view.add(second);
list_view.add(three);
//定义一个页面管理器
PagerAdapter pageadapt=new PagerAdapter() {
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0==arg1;
}
public Object instantiateItem(android.view.ViewGroup container, int position) {
container.addView(list_view.get(position));
return list_view.get(position);
};
public void destroyItem(android.view.ViewGroup container, int position, Object object) {
container.removeView(list_view.get(position));
};
public int getCount() {
return list_view.size();
}
};
mainview.setAdapter(pageadapt);
}
}
注意:实现PagerAdapter时,必须要实现该类中的4个方法:
a:public boolean isViewFromObject(View arg0, Object arg1) {};
b:public Object instantiateItem(android.view.ViewGroup container, int position) {};
c:public void destroyItem(android.view.ViewGroup container, int position, Object object){};
d:public int getCount(){};
方法a:是根据方法b返回的一个键值,判断键值所对应的View视图和方法b中添加的View视图是否一致,及判断是否是同一个View。
方法b:向ViewGroup中添加下一个将要显示的View,所以方法a:就是判断下一个将要显示的View是否正确。
注意:ViewGroup中最多只有3个视图:当前正在显示的视图;正在显示视图的下一个视图;和正在显示视图的上一个视图。
特殊情况是:第一次进入程序时,要执行两次方法b:第一次是将队列中的第一张视图显示出来,第二次是将下一个将要展示的视图正确的存入ViewGroup中。当前后不能切换时,只是执行方法d.
方法c: 会根据传入的position参数来移除ViewGroup中的指定视图,主要是保证ViewGroup中最多存在3个视图。
方法d: 在第一次进入程序是会首先执行两次,返回的值是切换视图的总数,此方法在用户触摸屏幕过程中会一直执行。当返回值大于总的视图数时,会出现文件找不到的异常,当返回值小于总的视图数时,会出现有些视图不能显示的问题。产生的原因是:方法d 返回整个视图队列的长度,后台程序会根据这个长度来设置加载和删除视图的上限。后台根据方法d 的返回值和用户切换的方向来给出position参数的值,即需要加载或移除视图在视图队列中的下标。此下标的最大值比方法d 的返回值小1。因为下标是从0开始。