Android ViewPager实现无限循环的实例

ViewPager自身并不支持左右无限循环的功能,这里就提供一种方案让Android ViewPager实现左右无限循环的功能,这里记录下:

用于显示的mViews,比数据源mList,多了两个节点元素(头节点0:b和尾节点5:e用于跳转)

下图的不带箭头的红线,是mViews根据mList初始化的情况;带箭头的红线是跳转的情况。

首先还是布局文件:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/viewpager"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignBottom="@id/viewpager"

android:background="#33000000"

android:orientation="vertical"

android:padding="5dip" >

android:id="@+id/tv_image_description"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="第一个引导页面"

android:textColor="@android:color/white"

android:textSize="14sp" />

android:id="@+id/ll_points"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="5dip"

android:layout_gravity="center_horizontal"

android:orientation="horizontal" >

接下来是MainActivity:

package com.example.viewpagertest;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

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.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

public class MainActivity extends Activity implements OnPageChangeListener {

private List imageViewList;

private ViewPager mViewPager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setView();

initView();

}

public void setView() {

setContentView(R.layout.activity_splash_viewpager);

}

public void initView() {

mViewPager = (ViewPager) findViewById(R.id.viewpager);

prepareData();

ViewPagerAdapter adapter = new ViewPagerAdapter();

mViewPager.setAdapter(adapter);

mViewPager.setOnPageChangeListener(this);

}

private void prepareData() {

imageViewList = new ArrayList();

int[] imageResIDs = getImageResIDs();

ImageView iv;

for (int i = 0; i < imageResIDs.length; i++) {

iv = new ImageView(this);

iv.setBackgroundResource(imageResIDs[i]);

imageViewList.add(iv);

}

}

/**

* 在此处本来是5张图片,现在在数组首尾各加了一张图

* @return

*/

private int[] getImageResIDs() {

return new int[]{

R.drawable.pic_02,

R.drawable.bg1,

R.drawable.bg2,

R.drawable.bg3,

R.drawable.pic_01,

R.drawable.pic_02,

R.drawable.bg1,

};

}

class ViewPagerAdapter extends PagerAdapter {

@Override

public int getCount() {

return imageViewList.size();

}

/**

* 判断出去的view是否等于进来的view 如果为true直接复用

*/

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == arg1;

}

/**

* 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来就是position

*/

@Override

public void destroyItem(ViewGroup container, int position, Object object) {

container.removeView(imageViewList.get(position));

}

/**

* 创建一个view

*/

@Override

public Object instantiateItem(ViewGroup container, int position) {

container.addView(imageViewList.get(position));

return imageViewList.get(position);

}

}

@Override

public void onPageScrollStateChanged(int arg0) {

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override

public void onPageSelected(int position) {

if ( imageViewList.size() > 1) { //多于1,才会循环跳转

if ( position < 1) { //首位之前,跳转到末尾(N)

position = 5;

mViewPager.setCurrentItem(position,false);

} else if ( position > 5) { //末位之后,跳转到首位(1)

mViewPager.setCurrentItem(1,false); //false:不显示跳转过程的动画

position = 1;

}

}

}

@Override

protected void onDestroy() {

super.onDestroy();

}

}

mViewPager.setCurrentItem(1,false); //false:不显示跳转过程的动画

上面的代码只是一个简单的Demo,如果不将跳转动画去掉的话,首尾页跳转的时候过渡效果会很不自然。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

android开发实例之viewpager无限循环+自动滚动,Android ViewPager实现无限循环的实例...相关推荐

  1. android横向自动滚动列表,android横向循环自动滚动

    项目需要实现GridView横向循环自动滚动 1.先看布局 android:layout_width="fill_parent" android:layout_height=&qu ...

  2. 微信小程序 - 新闻动态 / 公告上下滚动列表(上下循环滚动,无限上下自动滚动列表)

    前言 本文实现了 无限上下自动滚动列表 组件,常见于新闻动态列表.公告等场景,可直接调用. 您可以自定义滚动间隔与显示多少个列表, 另外点击每项会触发事件,可用于跳转到详情页. 代码干净整洁,注释详细 ...

  3. android开发人员要求_如何成为一名Android开发人员

    android开发人员要求 An Android Developer is somebody who creates our lives simple by creating a correspond ...

  4. Android开发环境搭建全程演示(jdk+eclip+android sdk)

    Android开发环境搭建全程演示(jdk+eclip+android sdk) http://files.cnblogs.com/Bany/Android%E5%BC%80%E5%8F%91%E7% ...

  5. Android开发学习---使用Intelij idea 13.1 进行android 开发

    Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为 ...

  6. android开发板只有网口和串口如何使用android studio进行调试

    android开发板只有网口和串口如何使用android studio进行调试 1.要先准备一条串口线,或者串口转usb的线,用于在pc端与开发板端建立连接. 2.要下载一个在pc端运行的超级终端,我 ...

  7. android linearlayout 自动滚动,Android开发,LinearLayout无法滚动问题

    刚开始学android,要做一个简单的界面,界面布局大致如下: 主要分为A.B.C三个部分,其中: A是一个ViewFlipper,用来显示广告: B是四个标签,分别对应四个子页面,在下部显示: C是 ...

  8. Android 开发必备知识点及面试题汇总(Android+Java,Kafka是如何实现高性能的

    执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞, ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

最新文章

  1. Asp.net控件开发学习笔记(三)-控件开发基础
  2. [推荐] 创业者要留意优先清算权
  3. vue render函数
  4. android 背景图片居中显示文字,Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。...
  5. (64)FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项?
  6. 导航类网站|设计没有感觉,苦于寻找各种工具 或者资料的小伙伴收藏好哦
  7. django系列3.3--CBV 和 FBV
  8. 关于网上商城开发的随笔记录2
  9. Shell命令打包Android apk
  10. C++ Test的使用
  11. 超详细!基于树莓派Python编程使用dht11温湿度模块
  12. 在计算机硬件系统中 cache是,CPU中Cache是什么
  13. Centos 搭建DHCP服务,新建独立网卡完成DHCP实验
  14. 关于sammy的初理解
  15. DQN玩Atari游戏安装atari环境bug指南
  16. Android Mms短信的发送流程,短信发送源码解析
  17. LibXL库使用详解
  18. 西瓜书笔记3: 线性模型
  19. [VIM] 配置选项说明
  20. 快捷键-Windows快捷键

热门文章

  1. 局部变量java6_java字节码-几种字符串局部变量用法的区别
  2. java反射机制关键字驱动_搭建关键字驱动自动化测试框架
  3. 技嘉z68pds3刷中文bios_技嘉RTX 3080 VISION OC雪鹰显卡评测:内容创作、3A游戏两不误之选...
  4. mysql 分区表 归档_MySQL分区表
  5. springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想
  6. 每日一皮:当你开始研究一个新项目时是这样的吗?
  7. 黑客使用合法工具接管 Docker 和 Kubernetes 平台
  8. MySQL 的 binlog 编号竟然可以这么大!
  9. 你必须收藏的Github技巧
  10. mysql 按条件导出数据_mysql命令行按任意查询条件导出指定数据