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();
-
-
-
- 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开始。