ViewPager详解(一)——ViewPager的基本使用完整示例

时间:2022-03-20 20:49:09

MainActivity如下:

package cn.ww;

import java.lang.reflect.Field;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.EdgeEffectCompat;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
/**
*
* @author http://blog.csdn.net/lfdfhl
*
* Demo描述:
* 1 ViewPager的基本使用完整示例
* 2 ViewPager处于最后一页时,手指从屏幕右方滑向左边时页面跳转.
*
*/
public class MainActivity extends Activity {
private Context mContext;
private ViewPager mViewPager;
private LauncherViewPagerAdapter mViewPagerAdapter;
private ImageView[] dotImageViews;
private PageChangeListenerImpl mPageChangeListenerImpl;
private LinearLayout mDotsLinearLayout;
//以下三个变量涉及到的功能:滑动到最后一页继续滑动时关闭ViewPager
//若不需要该功能,将此三个变量和与之相关代码注释即可
private EdgeEffectCompat leftEdge;
private EdgeEffectCompat rightEdge;
private boolean misScrolled = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉状态栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
init();
}

private void init() {
mContext = this;
mViewPager = (ViewPager) findViewById(R.id.guide_viewpager);
mDotsLinearLayout = (LinearLayout) findViewById(R.id.dotsLinearLayout);
mViewPagerAdapter = new LauncherViewPagerAdapter(mContext);
mPageChangeListenerImpl = new PageChangeListenerImpl();
mViewPager.setAdapter(mViewPagerAdapter);
mViewPager.setOnPageChangeListener(mPageChangeListenerImpl);
try {
Field leftEdgeField = mViewPager.getClass().getDeclaredField("mLeftEdge");
Field rightEdgeField = mViewPager.getClass().getDeclaredField("mRightEdge");
if (leftEdgeField != null && rightEdgeField != null) {
leftEdgeField.setAccessible(true);
rightEdgeField.setAccessible(true);
leftEdge = (EdgeEffectCompat) leftEdgeField.get(mViewPager);
rightEdge = (EdgeEffectCompat) rightEdgeField.get(mViewPager);
}
} catch (Exception e) {
e.printStackTrace();
}

initDots();
}


//初始化小圆点
private void initDots() {
dotImageViews = new ImageView[mViewPagerAdapter.getCount()];
for (int i = 0; i < dotImageViews.length; i++) {
LinearLayout layout = new LinearLayout(mContext);
ImageView imageView = new ImageView(mContext);
imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));
if (i == 0) {
imageView.setBackgroundResource(R.drawable.guide_dot_white);
} else {
layout.setPadding(20, 0, 0, 0);
imageView.setBackgroundResource(R.drawable.guide_dot_black);
}
dotImageViews[i] = imageView;
layout.addView(imageView);
mDotsLinearLayout.addView(layout);
}
}

private class PageChangeListenerImpl implements ViewPager.OnPageChangeListener {
@Override
public void onPageSelected(int selected) {
for (int i = 0; i < dotImageViews.length; i++) {
dotImageViews[selected].setBackgroundResource(R.drawable.guide_dot_white);
if (selected != i) {
dotImageViews[i].setBackgroundResource(R.drawable.guide_dot_black);
}
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
if (leftEdge != null && rightEdge != null) {
leftEdge.finish();
rightEdge.finish();
leftEdge.setSize(0, 0);
rightEdge.setSize(0, 0);
}
}

@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING:
misScrolled = false;
break;
case ViewPager.SCROLL_STATE_SETTLING:
misScrolled = true;
break;
case ViewPager.SCROLL_STATE_IDLE:
if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !misScrolled) {
//页面跳转的逻辑
finish();
}
misScrolled = true;
break;
}
}

}

@Override
protected void onDestroy() {
super.onDestroy();
if(null!=mViewPager){
mViewPager.removeAllViews();
mViewPager = null;
}
}

}

LauncherViewPagerAdapter如下:

package cn.ww;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;

public class LauncherViewPagerAdapter extends PagerAdapter {
private Context mContext;
private int[] pagesArray = {R.drawable.a,R.drawable.b, R.drawable.c, R.drawable.d};

public LauncherViewPagerAdapter(Context context) {
this.mContext = context;
}

@Override
public int getCount() {
return pagesArray.length;
}

@Override
public Object instantiateItem(View container, int position) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.guide_pager_adapter, null);
itemView.setFocusable(true);
ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
imageView.setBackgroundResource(pagesArray[position]);
((ViewPager) container).addView(itemView);
return itemView;
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView((View) object);
}
}

activity_main如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v4.view.ViewPager
android:id="@+id/guide_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<LinearLayout
android:id="@+id/dotsLinearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="100px"
android:layout_centerHorizontal="true"
android:orientation="horizontal">
</LinearLayout>



</RelativeLayout>

guide_pager_adapter如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</RelativeLayout>