在Android开发中使用ViewPager,通常用在启动引导界面,或者在使用Tab页面。java
大体步骤为:android
1、定义ViewPager对象、数据源对象(好比:List集合)app
2、实现PagerAdapter,重写里面的方法,好比通常实现如下四个方法:ide
3、通常实现OnPageChangeListener接口,重写方法,ui
/* 当页面在滑动的时候会调用此方法,在滑动被中止以前,此方法回一直获得 调用。其中三个参数的含义分别为: 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); }
在引导界面使用时,通常会用到this
这种小点,在滑动到第几个页面时,小点相应的突显出来。在onPageSelected()方法中写其改变的代码。code
下面是总体代码:对象
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); } } }