android 广告无限轮播,ViewPager两种方式实现无限轮播

本文介绍了在Android中使用ViewPager实现广告无限轮播的两种方案:1) 通过Adapter的getCount()返回Integer.MAX_VALUE;2) 在列表首尾插入数据制造循环假象。详细讨论了每种方案的实现细节和注意事项,包括Handler的postDelayed方法用于轮播功能,并对比了两种方案的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给自己的忠告:虽然轮子很好用,但是使用轮子的前提是:如果不去封装一些复杂的功能,自己会用最基本的方法写一个,不然再好的轮子那也是别人的,当自己项目遇到和轮子不一样的地方,那就只能束手无策或者改人家的源码,当然能看懂轮子的封装思想自己学以致用并且能够很轻松的更改源码那是最好不过的了。

1. 实现思路

两种方案:

(1)采用Adapter内的getCount()方法返回Integer.MAX_VALUE。

(2)在列表的最前面插入最后一条数据,在列表末尾插入第一个数据,造成循环的假象

2. 具体实现

2.1 方案一:getCount()返回Integer.MAX_VALUE

2.1.1 ViewPager无限循环

在ViewPager的Adapter内的getCount方法中,返回一个很大的数Integer.MAX_VALUE,理论上可以无限滑动。当显示完一个真实列表的周期后,又从真实列表的0位置显示数据,造成无限循环轮播的假象。因为ViewPager第一页不能向左滑动循环,所以我们要通过mViewPager.setCurrentItem(Integer.MAX_VALUE/2)设置选中的位置,这样最开始就可以向左滑动,但是因为要显示第一页所以该值%数据个数==0。因为设置为Integer.MAX_VALUE后会在setCurrentItem()的时候发生ANR,所以这里使用一个自定义的较大的数比较好,这里我是用500

//当前选中页

private int currentPosition;

//数据项个数

private List itemList;

public static final int mLooperCount = 500;

//设置当前选中的item

currentPosition = getStartItem();

viewPager1.setCurrentItem(currentPosition1);

private int getStartItem(){

if(getRealCount() == 0){

return 0;

}

// 我们设置当前选中的位置为Integer.MAX_VALUE / 2,这样开始就能往左滑动

// 但是要保证这个值与getRealPosition 的 余数为0,因为要从第一页开始显示

int currentItem =BannerAdapter.mLooperCount / 2;

if(currentItem % getRealCount() ==0 ){

return currentItem;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值