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;@Overrideprotected 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 {@Overridepublic 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);}}}@Overridepublic 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);}}@Overridepublic 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;}}}@Overrideprotected 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;}@Overridepublic int getCount() {return pagesArray.length;}@Overridepublic 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;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic 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.ViewPagerandroid:id="@+id/guide_viewpager"android:layout_width="match_parent"android:layout_height="match_parent" /><LinearLayoutandroid: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"><ImageViewandroid:id="@+id/imageView"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>

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

  1. ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同

     相关文章: 1.<ViewPager 详解(一)---基本入门> 2.<ViewPager 详解(二)---详解四大函数> 3.<ViewPager 详解(三)-- ...

  2. ViewPager 详解(五)-----使用Fragment实现ViewPager滑动

    前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...

  3. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  4. ViewPager详解

    ViewPager详解 ViewPager中的主要方法详解 OnPageChangeListener中的三个方法详解 三种适配器的使用及其主要方法详解 ViewPager用于实现页面间的切换. Vie ...

  5. python停止线程池_详解python中Threadpool线程池任务终止示例代码

    需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...

  6. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...

  7. 11. shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则

    shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则 文章目录 1.1 read详解 1.2 用法示例 1.3 while read ...

  8. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三) 本篇目录: 六.完整构建整个[旋转的精灵女孩]实例 (1).新建.启动webGL工程空间 (2).构建项目的目录层次结构 (2. ...

  9. Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(二)

    Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(二) 本篇目录: 五.实例中所使用的代码语法详细解释 (1).构建一个三维空间场景 (2).选择一个透视投影相机作为观察点 (a).创 ...

最新文章

  1. 7-flutter Navigator 和Route
  2. R 变量名开头不能为数字
  3. 避免打断链式结构:使用.compose( )操作符
  4. Ubuntu16.10安装Ocata之4:Neutron
  5. Oracle char 查询问题
  6. SDWebImage源码阅读(九)SDWebImageDownloader
  7. 程序员请注意:异步编程模式已被人注册为专利
  8. [css] css3和css2的区别是什么?
  9. Linux内核怎么优化,linux 内核该怎么优化
  10. Luogu P1280 Niko的任务【线性dp】By cellur925
  11. java post返回xml数据类型_Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据...
  12. 【Kotlin】我的第一个 Kotlin 程序
  13. Mysql 在DOS窗口下的操作
  14. SQL Server 自动循环归档分区数据脚本
  15. Android开发笔记(一百二十四)自定义相册
  16. VB实现可执行文件运行时自删除
  17. Java学习心得(集合、泛型)
  18. 盘点美颜api中的基本算法与开发难点
  19. 合并石头的最低成本问题
  20. Mac 苹果电脑创建一个新的管理员账号

热门文章

  1. SSH下的组合批量增加
  2. 十进制度转换为度分秒
  3. 一篇文读懂分布式系统本质:高吞吐、高可用、可扩展
  4. IOS之--UI进阶--多控制器管理第一天
  5. 【AndroidSupport】LinearLayoutCompat
  6. python 学习笔记 5 -- 文件输入输出
  7. 软件架构阅读笔记15
  8. 浅谈SpringMVC执行过程
  9. iOS集成sharesdk遇到的坑
  10. WINCE--编译环境一二三(转摘)