Android 使用 ViewPager循环广告位的实现
如何实现循环播放
现在网上实现循环播放都是在adapter的getCount()方法返回一个较大的值并且instantiateItem(ViewGroup container, int position)中通过取余(position/datas.size())的方式,让ViewPager不断的播放下去。
这里我们通过修改数据源和设置currentItem的方式实现。
修改数据源:
final List<Integer> datas = new ArrayList<>(); //这里添加测试数据,实际项目中可以是从网络获取数据 datas.add(R.mipmap.welcome_page_01); datas.add(R.mipmap.welcome_page_02); datas.add(R.mipmap.welcome_page_03); //处理数据源 datas.add(0,datas.get(datas.size()-1)); datas.add(datas.get(1));
设置currentItem需要在OnPageChangeListener对象中进行:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if(position==0){ mViewPager.setCurrentItem(datas.size()-2,false); }else if(position==datas.size()-1){ mViewPager.setCurrentItem(1,false); } } @Override public void onPageScrollStateChanged(int state) { } });
Adapter和一般的ViewPager的Adapter一样即可。
如何实现自动循环:
实现自动循环,方法比较多,比如Timer,Handler,Alarm等等。这里我们使用Handle的方式
自定义Handler类如下:
public class BannerHander extends Handler{ @Override public void handleMessage(Message msg) { if(msg.what==1){ mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1); sendEmptyMessageDelayed(1,3000); } } }
获取数据,给ViewPager设置Adapter之后就可以启动自动循环:
if(!(mHandler!=null && mHandler.get()!=null)){ mHandler = new WeakReference<BannerHander>(new BannerHander()); } mHandler.get().sendEmptyMessageDelayed(1, 300);
这里我们是用了弱引用,主要是为了防止出现内存溢出。
注意:
在设置CurrentItem时一定要在OnPageChangeListener中进行,Adapter的finishUpdate(View view)中设置会出现白屏的情况。如果哪位大神知道,麻烦指教下。
相关文章
Android Studio屏幕方向以及UI界面状态的保存代码详解
在本篇文章里小编给各位整理的是关于Android Studio屏幕方向以及UI界面状态的保存代码以及相关知识点,需要的跟着学习下。2019-10-10Flutter StatefulBuilder实现局部刷新实例详解
这篇文章主要为大家介绍了Flutter StatefulBuilder实现局部刷新实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-08-08Android 获取drawable目录图片 并存入指定文件的步骤详解
这篇文章主要介绍了Android 获取drawable目录图片 并存入指定文件,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-03-03详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅
这篇文章主要介绍了详解AndroidStudio JNI +Gradle3.0以上JNI爬坑之旅,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-12-12Android Studio开发中Gradle各种常见报错问题解决方案
这篇文章主要为大家介绍了Android Studio开发中Gradle各种常见报错问题解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-12-12
最新评论