Android实现轮播图无限循环效果
发布时间 - 2026-01-10 22:59:39 点击率:次本文实例为大家分享了Android轮播图无限循环的具体代码,供大家参考,具体内容如下

实现无限循环
在getCount()方法中,返回一个很大的值,Integer.MAX_VALUE
在instantiateItem()方法中,获取当前View的索引时,进行取于操作,传递进来的int position是个非常大的数,对他进行求余数
在destroyItem()方法中,同样
在onPageSelected()监听方法中,对传递进来的索引进行取于
反向的无限循环
调用ViewPager对象的setCurrentItem()方法,设置第一次进来时候的当前页,参数:int数字,我们把它定位到Integer.MAX_VALUE的中间,并且保证第一条是当前位置,Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size())
目前有个左划空白页的问题没解决
package com.tsh.myviewpager;
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;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private ViewPager vp_banner;
private LinearLayout ll_points;
private TextView tv_title;
private List<View> banners;
private String[] titles=new String[]{
"新闻标题1",
"新闻标题2",
"新闻标题3"
};
private List<ImageView> points=new ArrayList<ImageView>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
vp_banner = (ViewPager) findViewById(R.id.vp_banner);
ll_points = (LinearLayout) findViewById(R.id.ll_points);
tv_title = (TextView) findViewById(R.id.tv_title);
// banner部分
banners = new ArrayList<>();
ImageView img1 = new ImageView(this);
img1.setImageResource(R.drawable.a);
banners.add(img1);
ImageView img2 = new ImageView(this);
img2.setImageResource(R.drawable.b);
banners.add(img2);
ImageView img3 = new ImageView(this);
img3.setImageResource(R.drawable.c);
banners.add(img3);
//小图标
ll_points=(LinearLayout) findViewById(R.id.ll_points);
for(int i=0;i<banners.size();i++){
ImageView image=new ImageView(this);
image.setImageResource(R.drawable.point_selector);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(5, 5);
params.rightMargin=4;
image.setLayoutParams(params);
if(i==0){
image.setEnabled(true);
}else{
image.setEnabled(false);
}
points.add(image);
ll_points.addView(image);
}
// 设置适配器
vp_banner.setAdapter(new MyPagerAdapter());
vp_banner.setCurrentItem(Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size()));
vp_banner.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
tv_title.setText(titles[arg0%banners.size()]);
//小图标处理
for(ImageView point:points){
point.setEnabled(false);
}
points.get(arg0%banners.size()).setEnabled(true);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
System.out.println("销毁:"+position);
container.removeView((View)object);
object=null;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
System.out.println("初始化:"+position);
position=position%banners.size();
//解决右划出错
if(banners.get(position).getParent()!=null){
//container.removeView(banners.get(position));
}else{
container.addView(banners.get(position));
}
return banners.get(position);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 轮播图
# 无限循环
# Android ViewPager实现轮播图效果
# Android自定义控件实现简单的轮播图控件
# Android自定义控件实现优雅的广告轮播图
# Android实现ViewPage轮播图效果
# Android实现炫酷轮播图效果
# Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur
# 简单实现android轮播图
# Android如何使用RecyclerView打造首页轮播图
# Android开发在轮播图片上加入点击事件的方法
# flutter实现轮播图效果
# 小图标
# 是个
# 有个
# 对他
# 把它
# 第一条
# 大家分享
# 非常大
# 具体内容
# 大家多多
# 空白页
# 当前页
# ArrayList
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
佛山网站制作系统,佛山企业变更地址网上办理步骤?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
javascript中对象的定义、使用以及对象和原型链操作小结
Android使用GridView实现日历的简单功能
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
深入理解Android中的xmlns:tools属性
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
HTML 中如何正确使用模板变量为元素的 name 属性赋值
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
详解Huffman编码算法之Java实现
Laravel模型事件有哪些_Laravel Model Event生命周期详解
浅谈javascript alert和confirm的美化
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
如何用AI帮你把自己的生活经历写成一个有趣的故事?
js实现点击每个li节点,都弹出其文本值及修改
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
java ZXing生成二维码及条码实例分享
如何在IIS7中新建站点?详细步骤解析
如何在搬瓦工VPS快速搭建网站?
如何在IIS管理器中快速创建并配置网站?
iOS正则表达式验证手机号、邮箱、身份证号等
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Python并发异常传播_错误处理解析【教程】
郑州企业网站制作公司,郑州招聘网站有哪些?
javascript读取文本节点方法小结
canvas 画布在主流浏览器中的尺寸限制详细介绍
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何快速搭建高效可靠的建站解决方案?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel如何使用Eloquent进行子查询
b2c电商网站制作流程,b2c水平综合的电商平台?
如何快速完成中国万网建站详细流程?
千库网官网入口推荐 千库网设计创意平台入口
活动邀请函制作网站有哪些,活动邀请函文案?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何用wdcp快速搭建高效网站?
EditPlus中的正则表达式 实战(4)
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Android利用动画实现背景逐渐变暗
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
大连网站制作公司哪家好一点,大连买房网站哪个好?
详解Android——蓝牙技术 带你实现终端间数据传输
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复

