在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);
        }
    }
}