ViewPager详解(一)——ViewPager的基本使用完整示例
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的基本使用完整示例相关推荐
- ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
相关文章: 1.<ViewPager 详解(一)---基本入门> 2.<ViewPager 详解(二)---详解四大函数> 3.<ViewPager 详解(三)-- ...
- ViewPager 详解(五)-----使用Fragment实现ViewPager滑动
前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...
- ViewPager 详解(二)---详解四大函数
前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...
- ViewPager详解
ViewPager详解 ViewPager中的主要方法详解 OnPageChangeListener中的三个方法详解 三种适配器的使用及其主要方法详解 ViewPager用于实现页面间的切换. Vie ...
- python停止线程池_详解python中Threadpool线程池任务终止示例代码
需求 加入我们需要处理一串个位数(0~9),奇数时需要循环打印它:偶数则等待对应时长并完成所有任务:0则是错误,但不需要终止任务,可以自定义一些处理. 关键点 定义func函数处理需求 callbac ...
- Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一)
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) 本文目录: 一.[旋转的精灵女孩]案例运行效果 二.Three.js简介 三.Three.js代码正常运行显示条件 (1)不载入 ...
- 11. shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则
shell当中read详解,read语法选项,read用法示例,脚本示例,while read line详解,掌握原则 文章目录 1.1 read详解 1.2 用法示例 1.3 while read ...
- Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三)
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三) 本篇目录: 六.完整构建整个[旋转的精灵女孩]实例 (1).新建.启动webGL工程空间 (2).构建项目的目录层次结构 (2. ...
- Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(二)
Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(二) 本篇目录: 五.实例中所使用的代码语法详细解释 (1).构建一个三维空间场景 (2).选择一个透视投影相机作为观察点 (a).创 ...
最新文章
- 7-flutter Navigator 和Route
- R 变量名开头不能为数字
- 避免打断链式结构:使用.compose( )操作符
- Ubuntu16.10安装Ocata之4:Neutron
- Oracle char 查询问题
- SDWebImage源码阅读(九)SDWebImageDownloader
- 程序员请注意:异步编程模式已被人注册为专利
- [css] css3和css2的区别是什么?
- Linux内核怎么优化,linux 内核该怎么优化
- Luogu P1280 Niko的任务【线性dp】By cellur925
- java post返回xml数据类型_Java 通过HttpURLConnection Post方式提交xml,并从服务端返回数据...
- 【Kotlin】我的第一个 Kotlin 程序
- Mysql 在DOS窗口下的操作
- SQL Server 自动循环归档分区数据脚本
- Android开发笔记(一百二十四)自定义相册
- VB实现可执行文件运行时自删除
- Java学习心得(集合、泛型)
- 盘点美颜api中的基本算法与开发难点
- 合并石头的最低成本问题
- Mac 苹果电脑创建一个新的管理员账号