在Android开发中使用ViewPager,一般用在启动引导界面,或者在使用Tab页面。
大致步骤为:
一、定义ViewPager对象、数据源对象(比如:List集合)
二、实现PagerAdapter,重写里面的方法,比如一般实现以下四个方法:
三、一般实现OnPageChangeListener接口,重写方法,
/*
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到
调用。其中三个参数的含义分别为:
position :当前页面,及你点击滑动的页面
positionOffset:当前页面偏移的百分比
positionOffsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.d("555", "onPageScrolled当前点击页面: " + position + "--当前页面偏移的百分百: " + positionOffset + "--当前页面偏移的像素位置: " + positionOffsetPixels);
if (position == 3 && positionOffsetPixels >= 0) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
/*
此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)
*/
@Override
public void onPageSelected(int position) {
mImg[0].setBackgroundResource(R.drawable.page_indicator);
mImg[1].setBackgroundResource(R.drawable.page_indicator);
mImg[2].setBackgroundResource(R.drawable.page_indicator);
mImg[3].setBackgroundResource(R.drawable.page_indicator);
mImg[position].setBackgroundResource(R.drawable.page_indicator_focused);
Log.d("555", "onPageSelected" + position);
}
/*
此方法是在状态改变的时候调用
有三种状态(0,1,2)。state ==1的时辰默示正在滑动,
state==2的时辰默示滑动完毕了,state==0的时辰默示什么都没做。
当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)
*/
@Override
public void onPageScrollStateChanged(int state) {
Log.d("555", "onPageScrollStateChanged状态: " + state);
}
在引导界面使用时,一般会用到
这种小点,在滑动到第几个页面时,小点相应的突显出来。在onPageSelected()方法中写其改变的代码。
下面是整体代码:
package com.li.uitext;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* 启动页
* Created by useradmin on 2016/1/27.
*/
public class StartPagerActivity extends Activity implements OnPageChangeListener {
@Bind(R.id.start_viewpager)
ViewPager startViewpager;
@Bind(R.id.start_img1)
ImageView mImg1;
@Bind(R.id.start_img2)
ImageView mImg2;
@Bind(R.id.start_img3)
ImageView mImg3;
@Bind(R.id.start_img4)
ImageView mImg4;
private StartPagerAdapter mPagerAdapter;
private ArrayList<View> mView;
private ImageView[] mImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.startpager_activity);
ButterKnife.bind(StartPagerActivity.this);
mImg = new ImageView[]{mImg1, mImg2, mImg3, mImg4};
mView = new ArrayList<View>();
View layout1 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg1, null);
View layout2 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg2, null);
View layout3 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg3, null);
View layout4 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg4, null);
mView.add(layout1);
mView.add(layout2);
mView.add(layout3);
mView.add(layout4);
mImg[0].setBackgroundResource(R.drawable.page_indicator_focused);
mPagerAdapter = new StartPagerAdapter();
startViewpager.setAdapter(mPagerAdapter);
startViewpager.setOnPageChangeListener(this);
}
/*
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到
调用。其中三个参数的含义分别为:
position :当前页面,及你点击滑动的页面
positionOffset:当前页面偏移的百分比
positionOffsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.d("555", "onPageScrolled当前点击页面: " + position + "--当前页面偏移的百分百: " + positionOffset + "--当前页面偏移的像素位置: " + positionOffsetPixels);
if (position == 3 && positionOffsetPixels >= 0) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
/*
此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)
*/
@Override
public void onPageSelected(int position) {
mImg[0].setBackgroundResource(R.drawable.page_indicator);
mImg[1].setBackgroundResource(R.drawable.page_indicator);
mImg[2].setBackgroundResource(R.drawable.page_indicator);
mImg[3].setBackgroundResource(R.drawable.page_indicator);
mImg[position].setBackgroundResource(R.drawable.page_indicator_focused);
// for (int i = 0; i < mImg.length; i++) {
// Log.d("555","for循环第"+position+"次");
// if (i == position) {
// mImg[i].setBackgroundResource(R.drawable.page_indicator_focused);
// } else {
// mImg[i].setBackgroundResource(R.drawable.page_indicator);
// }
// }
Log.d("555", "onPageSelected" + position);
}
/*
此方法是在状态改变的时候调用
有三种状态(0,1,2)。state ==1的时辰默示正在滑动,
state==2的时辰默示滑动完毕了,state==0的时辰默示什么都没做。
当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)
*/
@Override
public void onPageScrollStateChanged(int state) {
Log.d("555", "onPageScrollStateChanged状态: " + state);
}
class StartPagerAdapter extends PagerAdapter {
/*
返回数据源大小
*/
@Override
public int getCount() {
return mView.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/*
删除页面
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView(mView.get(position));
}
/*
添加新的页面
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(mView.get(position), 0);
return mView.get(position);
}
}
}
package com.li.uitext;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* 启动页
* Created by useradmin on 2016/1/27.
*/
public class StartPagerActivity extends Activity implements OnPageChangeListener {
@Bind(R.id.start_viewpager)
ViewPager startViewpager;
@Bind(R.id.start_img1)
ImageView mImg1;
@Bind(R.id.start_img2)
ImageView mImg2;
@Bind(R.id.start_img3)
ImageView mImg3;
@Bind(R.id.start_img4)
ImageView mImg4;
private StartPagerAdapter mPagerAdapter;
private ArrayList<View> mView;
private ImageView[] mImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.startpager_activity);
ButterKnife.bind(StartPagerActivity.this);
mImg = new ImageView[]{mImg1, mImg2, mImg3, mImg4};
mView = new ArrayList<View>();
View layout1 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg1, null);
View layout2 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg2, null);
View layout3 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg3, null);
View layout4 = LayoutInflater.from(StartPagerActivity.this).inflate(R.layout.startimg4, null);
mView.add(layout1);
mView.add(layout2);
mView.add(layout3);
mView.add(layout4);
mImg[0].setBackgroundResource(R.drawable.page_indicator_focused);
mPagerAdapter = new StartPagerAdapter();
startViewpager.setAdapter(mPagerAdapter);
startViewpager.setOnPageChangeListener(this);
}
/*
当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到
调用。其中三个参数的含义分别为:
position :当前页面,及你点击滑动的页面
positionOffset:当前页面偏移的百分比
positionOffsetPixels:当前页面偏移的像素位置
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.d("555", "onPageScrolled当前点击页面: " + position + "--当前页面偏移的百分百: " + positionOffset + "--当前页面偏移的像素位置: " + positionOffsetPixels);
if (position == 3 && positionOffsetPixels >= 0) {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
}
}
/*
此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)
*/
@Override
public void onPageSelected(int position) {
mImg[0].setBackgroundResource(R.drawable.page_indicator);
mImg[1].setBackgroundResource(R.drawable.page_indicator);
mImg[2].setBackgroundResource(R.drawable.page_indicator);
mImg[3].setBackgroundResource(R.drawable.page_indicator);
mImg[position].setBackgroundResource(R.drawable.page_indicator_focused);
// for (int i = 0; i < mImg.length; i++) {
// Log.d("555","for循环第"+position+"次");
// if (i == position) {
// mImg[i].setBackgroundResource(R.drawable.page_indicator_focused);
// } else {
// mImg[i].setBackgroundResource(R.drawable.page_indicator);
// }
// }
Log.d("555", "onPageSelected" + position);
}
/*
此方法是在状态改变的时候调用
有三种状态(0,1,2)。state ==1的时辰默示正在滑动,
state==2的时辰默示滑动完毕了,state==0的时辰默示什么都没做。
当页面开始滑动的时候,三种状态的变化顺序为(1,2,0)
*/
@Override
public void onPageScrollStateChanged(int state) {
Log.d("555", "onPageScrollStateChanged状态: " + state);
}
class StartPagerAdapter extends PagerAdapter {
/*
返回数据源大小
*/
@Override
public int getCount() {
return mView.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/*
删除页面
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView(mView.get(position));
}
/*
添加新的页面
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
((ViewPager) container).addView(mView.get(position), 0);
return mView.get(position);
}
}
}