ViewPager循环广告位的实现
1、如何实现循环播放
2、如何实现自动循环
如何实现循环播放
现在网上实现循环播放都是在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)中设置会出现白屏的情况。如果哪位大神知道,麻烦指教下。
ViewPager循环广告位的实现的更多相关文章
- ViewPager循环显示
好久没有写博客了,今天加一个ViewPager页面的循环显示,添加了一个删除页面的小按钮: MainActivity.java package com.yt.viewpagerlooper; impo ...
- viewpager循环滚动和自动轮播的问题
ViewPager是一个常用的android组件,不过通常我们使用ViewPager的时候不能实现左右无限循环滑动,在滑到边界的时候会看到一个不能翻页的动画,可能影响用户体验.此外,某些区域性的Vie ...
- Android之ViewPager循环Demo
ViewPager是谷歌官方提供的兼容低版本安卓设备的软件包,里面包含了只有在安卓3.0以上可以使用的api.Viewpager现在也算是标配了,如果一个App没有用到ViewPager感觉还是比较罕 ...
- ViewPager循环滚动
一.先写个适配器 public class MyPagerAdapter extends PagerAdapter { /** * 上下文 */ private Context context; /* ...
- 详细分析Android viewpager 无限循环滚动图片
由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...
- ViewPager使用记录3——循环展示
ViewPager是v4支持库中的一个控件,相信几乎所有接触Android开发的人都对它不陌生.之所以还要在这里翻旧账,是因为我在最近的项目中有多个需求用到了它,觉得自己对它的认识不够深刻.我计划从最 ...
- Android自定义控件之轮播图控件
背景 最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码.于是自己封装了一下.本篇轮播图实现原理原文出处: ...
- 利用Android属性动画实现Banner的原理与实践
事实上在Android刚推出属性动画的时候.就想利用它来设计一个Banner控件,一直没什么时间尝试. 在当时看我们应用中的Banner,使用计时器来控制自己主动播放,设置一个非常大的数,利用余数原理 ...
- android自定义控件之滚动广告条
在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看 ...
随机推荐
- ExtJS简单的动画效果(ext js淡入淡出特效)
1.html页面:Application HTML file - index.html <html> <head> <title>ExtJs fadeIn() an ...
- javascript summary
Client Javascript HTML5: http://www.html5rocks.com/en/ Libraray: JQuery, JQuery Mobile, Zepto, MoolT ...
- hdu 5151 Sit sit sit
http://acm.hdu.edu.cn/showproblem.php?pid=5151 题意:一共有N个椅子,然后有N个学生依次去坐,满足下面三个条件不能坐上去,1:这个椅子旁边有左椅子也有右椅 ...
- C++不能中断构造函数来拒绝产生对象(在构造和析构中抛出异常)
这是我的感觉,具体需要研究一下- 找到一篇文章:在构造和析构中抛出异常 测试验证在类构造和析构中抛出异常, 是否会调用该类析构. 如果在一个类成员函数中抛异常, 可以进入该类的析构函数. /// @f ...
- 浅谈RDD
RDD(Resilient Distributed Datasets)弹性分布式数据集,是在集群应用中分享数据的一种高效,通用,容错的抽象,是Spark提供的最重要的抽象的概念, 它是一种有容错机制 ...
- VS2012中使用编译的Qt-5.1.1静态库开发程序
1. 安装qt-vs-addin-1.2.2-opensource.exe,安装之后,vs2012菜单栏就会出现QT5菜单. 2. 在qt-vs-addin添加Qt5静态库: QT5->Qt O ...
- 2015 CCC - 02 找不匹配
照例传送门CNUOJ - 0385:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=355 题目分析:首先感谢”数据结构与算法“群群友 ...
- 【JavaScript】
右键禁用.防止文字选中 .返回选中的文本 JavaScript 原理 Javascript高性能动画与页面渲染 前端不为人知的一面--前端冷知识集锦 屏幕外去计算值,position:absolute ...
- javascript 路线整理
前端开发很重要,编写脚本也不容易. 总结我以前的前端学习经历,基本是一团乱麻:css+javascript是在大三自学的,当时自己做课程设计,逼着自己在一个月之内,写了一个半成品的j2ee网站.当时, ...
- 【转】color颜色十六进制编码大全
原文网址:http://blog.csdn.net/coder_pig/article/details/18262105 最近刚开始学web,发现好的颜色搭配可以让自己的网页更加美观, 中午不想做事, ...