本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用。
概述
ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)PageAdapter来进行数据和页面的传递。ViewPager更多时候会和Fragment一起使用,方便管理各个页面的生命周期。
涉及知识点
- ViewPager并非是原生的UI控件,所以使用的时候需要包含全部的包名(android.support.v4.view.ViewPager)。
- PagerAdapter 是一个抽象基类,开发时需要实现类中的抽象方法。用于将数据在ViewPager中展示出来。 PagerAdapter的抽象方法需要实现以下几个:
- getCount() 用于获取需要展示的子视图的数量
- isViewFromObject(View view, Object object) 子视图是否需要重新加载,如果已经加载过,则不需要重新加载。
- destroyItem(ViewGroup container, int position, Object object) 删除子视图
- instantiateItem(ViewGroup container, int position) 生成对应位置的子视图
- addOnPageChangeListener 对ViewPager增加监听事件
- SimpleOnPageChangeListener 是实现OnPageChangeListener接口的类,需要实现onPageSelected(int position)方法即可。
- ImageView 图片视图,用于显示图片,本例中主要用于ViewPager中的指示器。
- FragmentPagerAdapter 用于显示Fragment的适配器。
- FragmentManager 一个用于管理Fragmetn的抽象类,是FragmentPagerAdapter构造函数中的一个参数。
示例截图
图片轮播如下所示:
示例源码
xml布局代码
1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context="com.hex.demoviewpager.MainActivity"> 8 <android.support.v4.view.ViewPager 9 android:id="@+id/vp_info" 10 android:scrollIndicators="bottom" 11 android:layout_width="match_parent" 12 android:layout_height="match_parent"> 13 </android.support.v4.view.ViewPager> 14 <TextView 15 android:id="@+id/tv_title" 16 android:layout_alignBottom="@id/vp_info" 17 android:layout_centerHorizontal="true" 18 android:textSize="20dp" 19 android:text="aaaa" 20 android:layout_marginBottom="30dp" 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content"/> 23 <LinearLayout 24 android:id="@+id/ll_Indicator" 25 android:layout_alignBottom="@id/vp_info" 26 android:layout_centerHorizontal="true" 27 android:gravity="center" 28 android:orientation="horizontal" 29 android:layout_width="200dp" 30 android:layout_height="wrap_content"> 31 32 </LinearLayout> 33 <Button 34 android:id="@+id/bn_go" 35 android:text="@string/go" 36 android:layout_alignParentTop="true" 37 android:layout_width="wrap_content" 38 android:layout_height="wrap_content"/> 39 </RelativeLayout>
Java代码(图片轮播)
1 package com.hex.demoviewpager; 2 3 import android.content.Intent; 4 import android.support.v4.view.PagerAdapter; 5 import android.support.v4.view.ViewPager; 6 import android.support.v7.app.ActionBar; 7 import android.support.v7.app.AppCompatActivity; 8 import android.os.Bundle; 9 import android.util.Log; 10 import android.view.View; 11 import android.view.ViewGroup; 12 import android.widget.Button; 13 import android.widget.ImageView;