一、概述

ViewPager是android扩展包v4包(android.support.v4.view.ViewPager)中的类,这个类可以让用户左右切换当前的view。

ViewPager特点:

  1)ViewPager类直接继承了ViewGroup类,所以它是一个容器类,可以在其中添加其他的view类。

  2)ViewPager类需要一个PagerAdapter适配器类(通常需要自定义适配器继承PagerAdapter类重写其中的方法)给它提供数据。

  3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

 

二、关键方法

setCurrentItem(int position)           显示第position页的View(界面)
setAdapter()                                    设置ViewPager的适配器,参数为是适配器
setOnPageChangeListener()           设置页面改变事件监听事件
setOffscreenPageLimit(int limit)       设置脱离屏幕的页面限制--最多同时显示的页面数 

 

三、适配器

ViewPager相关适配器:

1、PagerAdapter  需要重写getCount(),isViewFromObject()方法,添加instantiateItem(),destroyItem()方法

2、FragmentPagerAdapter和FragmentStatePagerAdapter

区别:

FragmentPagerAdapter  //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,则销毁fragment(a)的View,fragment(a)不销毁

FragmentStatePagerAdapter //这个适配器当前fragment(正在显示的)和其他fragment(a)(未显示的)间隔超过一个fragment的距离,则销毁fragment(a)

 

四、通过简单的Demo学习ViewPager的使用步骤

1、在布局文件中使用<android.support.v4.view.ViewPager>标签

 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     >
 6 
 7     <android.support.v4.view.ViewPager    //用于显示ViewPager
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:id="@+id/viewPager"        
11         />
12 
13 </FrameLayout>

 

2、代码中增加显示的页面(创建一个存放View的集合,向集合中添加的View就是要显示的View,比如三个界面都是ImageView),

 1 View views = new ArrayList<View>();
 2         int image[] = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};  //这里三张图片分别是红,黄,蓝色的图片
 3         for(int i=1;i<=3;i++)
 4         {
 5             //实例化中ViewPager中要显示的图片控件
 6             imageView = new ImageView(getApplicationContext());
 7             //设置图片格式
 8             imageView.setScaleType(ScaleType.CENTER_CROP);
 9             imageView.setImageResource(image[i-1]);
10             views.add(imageView);
11         }

 

3、在Activity里实例化ViewPager组件,并设置它的Adapter(即PagerAdapter)

 1        //实例化适配器
 2         MyPagerAdapter adapter = new MyPagerAdapter();
 3         //设置适配器
 4         
 5         viewPager.setAdapter(adapter);
 6 
 7 //声明PagerAdapter子类,用于管理ViewPager中显示的View控件,重写四个方法
 8     class MyPagerAdapter extends PagerAdapter
 9     {
10 
11         @Override
12         public int getCount() {
13             // TODO Auto-generated method stub
14             return views.size();
15         }
16 
17         //判断当前显示的UI对象是否和数据对象一致
18         @Override
19         public boolean isViewFromObject(View arg0, Object arg1) {
20             // TODO Auto-generated method stub
21             return arg0 == arg1;
22         }
23         
24         @Override
25         public Object instantiateItem(ViewGroup container, int position) {
26             //获得指定位置的View,并增加到ViewPager中,同时作为当前页面的数据返回
27             container.addView(views.get(position));
28             return views.get(position);
29             
30         }
31         
32         @Override
33         public void destroyItem(ViewGroup container, int position, Object object) {
34             //当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,是则将当前页面移除
35             container.removeView(views.get(position));
36         }
37         
38         
39     }
40     

完整java代码:

  1 package com.example.myviewpager;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import android.app.Activity;
  7 import android.os.Bundle;
  8 import android.support.v4.view.PagerAdapter;
  9 import android.support.v4.view.ViewPager;
 10 import android.support.v4.view.ViewPager.OnPageChangeListener;
 11 import android.view.Menu;
 12 import android.view.View;
 13 import android.view.ViewGroup;
 14 import android.widget.ImageView;
 15 import android.widget.ImageView.ScaleType;
 16 
 17 public class MainActivity extends Activity {
 18     
 19     private ImageView imageView;
 20     //自定义Pager适配器继承PagerAdapter
 21     private MyPagerAdapter adapter;
 22     // ViewPager控件
 23     private ViewPager viewPager;
 24     //存放View类数据的集合
 25     private List<View> views; 
 26     
 27     
 28     @Override
 29     protected void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31         setContentView(R.layout.activity_main);
 32         
 33         viewPager = (ViewPager) findViewById(R.id.viewPager);
 34         
 35         initView();
 36         
 37     }
 38 
 39     private void initView() {
 40         //加载ViewPager中显示的页面
 41         //实例化集合
 42         views = new ArrayList<View>();
 43         int image[] = new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3};
 44         
 45         for(int i=1;i<=3;i++)
 46         {
 47             //实例化中ViewPager中要显示的图片控件
 48             imageView = new ImageView(getApplicationContext());
 49             //设置图片格式
 50             imageView.setScaleType(ScaleType.CENTER_CROP);
 51             imageView.setImageResource(image[i-1]);
 52             views.add(imageView);
 53             
 54         }
 55         //实例化适配器
 56         adapter = new MyPagerAdapter();
 57         //设置适配器
 58         
 59         viewPager.setAdapter(adapter);
 60         //设置移除UI的间隔大小,默认为1
 61 //        viewPager.setOffscreenPageLimit(3);
 62         
 63     }
 64 
 65     //声明PagerAdapter子类,用于管理ViewPager中显示的View控件
 66     class MyPagerAdapter extends PagerAdapter
 67     {
 68 
 69         @Override
 70         public int getCount() {
 71             // TODO Auto-generated method stub
 72             return views.size();
 73         }
 74 
 75         //判断当前显示的UI对象是否和数据对象一致
 76         @Override
 77         public boolean isViewFromObject(View arg0, Object arg1) {
 78             // TODO Auto-generated method stub
 79             return arg0 == arg1;
 80         }
 81         
 82         @Override
 83         public Object instantiateItem(ViewGroup container, int position) {
 84             //获得指定位置的View,并增加到ViewPager中,同时作为当前页面的数据返回
 85             container.addView(views.get(position));
 86             return views.get(position);
 87             
 88         }
 89         
 90         @Override
 91         public void destroyItem(ViewGroup container, int position, Object object) {
 92             //当前位置和ViewPager中正显示的页面的位置的间隔是否超出一个页面,是则将当前页面移除
 93             container.removeView(views.get(position));
 94         }
 95         
 96         
 97     }
 98     
 99     
100     @Override
101     public boolean onCreateOptionsMenu(Menu menu) {
102         // Inflate the menu; this adds items to the action bar if it is present.
103         getMenuInflater().inflate(R.menu.main, menu);
104         return true;
105     }
106 
107 }
MainActivity.java

相关文章:

  • 2021-12-24
  • 2021-12-24
  • 2021-08-25
  • 2022-02-24
  • 2022-12-23
  • 2022-12-23
  • 2021-12-19
  • 2021-12-13
猜你喜欢
  • 2021-12-13
  • 2021-12-24
  • 2021-12-24
  • 2022-12-23
  • 2021-12-28
  • 2021-12-24
相关资源
相似解决方案