android开发实例之viewpager无限循环+自动滚动,Android ViewPager实现无限循环的实例...
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实现无限循环的实例...相关推荐
- android横向自动滚动列表,android横向循环自动滚动
项目需要实现GridView横向循环自动滚动 1.先看布局 android:layout_width="fill_parent" android:layout_height=&qu ...
- 微信小程序 - 新闻动态 / 公告上下滚动列表(上下循环滚动,无限上下自动滚动列表)
前言 本文实现了 无限上下自动滚动列表 组件,常见于新闻动态列表.公告等场景,可直接调用. 您可以自定义滚动间隔与显示多少个列表, 另外点击每项会触发事件,可用于跳转到详情页. 代码干净整洁,注释详细 ...
- android开发人员要求_如何成为一名Android开发人员
android开发人员要求 An Android Developer is somebody who creates our lives simple by creating a correspond ...
- Android开发环境搭建全程演示(jdk+eclip+android sdk)
Android开发环境搭建全程演示(jdk+eclip+android sdk) http://files.cnblogs.com/Bany/Android%E5%BC%80%E5%8F%91%E7% ...
- Android开发学习---使用Intelij idea 13.1 进行android 开发
Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为 ...
- android开发板只有网口和串口如何使用android studio进行调试
android开发板只有网口和串口如何使用android studio进行调试 1.要先准备一条串口线,或者串口转usb的线,用于在pc端与开发板端建立连接. 2.要下载一个在pc端运行的超级终端,我 ...
- android linearlayout 自动滚动,Android开发,LinearLayout无法滚动问题
刚开始学android,要做一个简单的界面,界面布局大致如下: 主要分为A.B.C三个部分,其中: A是一个ViewFlipper,用来显示广告: B是四个标签,分别对应四个子页面,在下部显示: C是 ...
- Android 开发必备知识点及面试题汇总(Android+Java,Kafka是如何实现高性能的
执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不适用于 AsyncTask,因为会导致线程池堵塞, ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
最新文章
- Asp.net控件开发学习笔记(三)-控件开发基础
- [推荐] 创业者要留意优先清算权
- vue render函数
- android 背景图片居中显示文字,Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。...
- (64)FPGA面试题-在Verilog中,$display语句可以使用哪些不同的选项?
- 导航类网站|设计没有感觉,苦于寻找各种工具 或者资料的小伙伴收藏好哦
- django系列3.3--CBV 和 FBV
- 关于网上商城开发的随笔记录2
- Shell命令打包Android apk
- C++ Test的使用
- 超详细!基于树莓派Python编程使用dht11温湿度模块
- 在计算机硬件系统中 cache是,CPU中Cache是什么
- Centos 搭建DHCP服务,新建独立网卡完成DHCP实验
- 关于sammy的初理解
- DQN玩Atari游戏安装atari环境bug指南
- Android Mms短信的发送流程,短信发送源码解析
- LibXL库使用详解
- 西瓜书笔记3: 线性模型
- [VIM] 配置选项说明
- 快捷键-Windows快捷键
热门文章
- 局部变量java6_java字节码-几种字符串局部变量用法的区别
- java反射机制关键字驱动_搭建关键字驱动自动化测试框架
- 技嘉z68pds3刷中文bios_技嘉RTX 3080 VISION OC雪鹰显卡评测:内容创作、3A游戏两不误之选...
- mysql 分区表 归档_MySQL分区表
- springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想
- 每日一皮:当你开始研究一个新项目时是这样的吗?
- 黑客使用合法工具接管 Docker 和 Kubernetes 平台
- MySQL 的 binlog 编号竟然可以这么大!
- 你必须收藏的Github技巧
- mysql 按条件导出数据_mysql命令行按任意查询条件导出指定数据