需求描述

轮播图也是大部分app都有的效果,商品类跟新闻类的app是肯定会有的。

轮播图的效果跟第一次启动时的引导页类似,不过轮播图在引导页的基础上多了几个功能:在第一页也能向左滑动,在最后一页也能向右滑动

有个计时器,每隔一段时间滚动轮播图

先看效果图

代码实现

activity_main.xml

最外层是RelativeLayout,固定高度200dp,里面有ViewPager跟LinearLayout,ViewPager用来显示banner图片,LinearLayout显示点点点图片,表示当前ViewPager的选中状态。

BannerAdapter.java ViewPager适配器,继承自PagerAdapter,重写四个方法。

首先我们把要显示的图片的资源id放到一个名字为banners的int数组中,这是一个实例变量,在构造方法中传入context对象。getCount 返回int的最大值,这样有个好处就是当你滑动到来最后一页还能往后滑动。

isViewFromObject 常规写法 参数1==参数2

destroyItem 删除一条记录

instantiateItem 添加一条记录,首先传入的position的值是0到int最大值,因为我们前面的getCount方法就返回int类型最大值,所以这里我们要对图片数量进行求余,这样求余之后position的值必定小于图片数量,初始化ImageView对象,设置图片缩放类型,把position通过setTag保存到view里面,设置图片资源,给图片设置点击事件,最后把图片添加到ViewGroup里面。这个ViewGroup就是ViewPager自己,如果你看了源码,ViewPager就是继承自ViewGroup的。

onClickListener 先判断onBannerClickListener是否为空,如果不为空,调用onBannerClickListener的onClick方法。

setOnBannerClickListener 设置banner item点击监听,其实就是设置图片点击。

getBanners 返回图片资源数组。

MainActivity.java

onCreate 查找ViewPager控件,初始化BannerAdapter对象,给bannerAdapter设置点击事件(图片点击),给ViewPager设置缓存页数,设置适配器,添加页面改变监听,查找ViewGroup,循环添加显示点点点图片的ImageView,在for循环中创建ImageView对象,设置图片宽高,给图片设置资源图片,选中跟未选中资源图片不一样,默认第一个点选中。最后调用viewGroup.addView方法把图片添加进去,这个方法有第二个参数,可以设置左右外边距。通过ViewPager.setCurrentItem方法设置当前页,当前页的值给一个比较大默认值,这样做的好处就是软件刚打开Banner也能向左边滑动,最后开启计时器,这里调用postDelayed方法,这个方法可以延迟执行Runnable,它有两个参数,第一个参数是Runnable,第二个参数是延迟的时间,我们延迟5秒执行。Handler+Runnable当计时器使用大家应该都明白了把,毕竟我们前面的音乐播放器,视频播放器都这么用过。

onPageChangeListener 在onPageSelected方法中把当前的position赋值给currentItem,调用setImageBackground方法改变点点点图片的选中状态,传入了一个int类型的值,我们先对position求余之后再传入进去。

setImageBackground 改变点点点图片的选中状态,循环图片数量,根据下标从viewGroup中找出ImageView,先把背景设置成无,如果选中显示选中图片,未选中设置未选中图片。

onBannerClickListener 图片点击监听,在这里可以处理图片点击之后做的事情

onDestroy 删除计时器,大家在开发中如果有需要释放的东西一定要在onDestroy中加上,即时释放资源是一个程序员良好的习惯。所以建议大家都养成这个习惯。

源码下载:

如果您想第一时间看我的后期文章,公众号每周不定期推送:Android开发666

java中广告维护轮播图怎么做_Banner广告轮播图相关推荐

  1. android 折线图 渐变,做一个渐变色的折线图

    折线图 一个折线图的需求,好久没写过折线图了,打算自己弄下. 对于折线图或者条形统计图来说,我很少自己去封装,并不是有多难有多麻烦(其实找到规律之后反而很简单),而是我觉得根本没有一个好的封装方式,U ...

  2. GOF23种设计模式在Java中的应用(part 1)

    第二部分:GOF23种设计模式在Java中的应用(part 2) 一.GOF来源及简介 1.1 GOF23种设计模式简介 <Design Patterns: Elements of Reusab ...

  3. java uml 类图 加号_UML建模基础 UML类图的组成元素和关系解析

    本文和大家重点讨论一下在UML建模中UML类图的java代码表现,主要包括UML类图元素和关系两大部分内容,相信通过本文的介绍你对UML类图的概念一定会与明确的认识. 在UML建模中UML类图的jav ...

  4. 万字长文深入理解java中的集合-附PDF下载

    文章目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fai ...

  5. Java 中对象占用内存大小计算

    原文地址 mp.weixin.qq.com byte 与 bit bit:位,比特.信息的最小单位,二进制数中的一个位数 (二进制位),其值为"0" 或"1": ...

  6. Java中的注解以及应用 @Deprecated @SupressWarning @Override

    Annotation注解在Java中有着很广泛的 ,他是做为一种标识 为javac所识别 ,.每一个注解 都对应这一个 Java类  在java.lang包中 有三个注解  分别是 Deprecate ...

  7. java中的类型擦除type erasure

    文章目录 简介 举个例子 原因 解决办法 总结 java中的类型擦除type erasure 简介 泛型是java从JDK 5开始引入的新特性,泛型的引入可以让我们在代码编译的时候就强制检查传入的类型 ...

  8. Java中的紧凑堆外结构/组合

    在上一篇文章中,我详细介绍了代码对主内存的访问方式的含义. 从那时起,我对使用Java可以做什么以实现更可预测的内存布局有很多疑问. 有些模式可以使用数组支持的结构来应用,我将在另一篇文章中讨论. 这 ...

  9. Java中的注解以及应用 @Deprecated @SupressWarning @Override

    Annotation注解在 Java 中有着很广泛的,他是做为一种标识 为javac所识别,.每一个注解 都对应这一个Java类  在java.lang包中 有三个注解  分别是 Deprecated ...

最新文章

  1. iframe中的奇怪现象
  2. 自己编写的MSN历史记录合并工具
  3. 解决idea控制台打印乱码问题
  4. stm32 bootloader跳转
  5. 在Android中使用FlatBuffers
  6. 【小姨子】 基本信息(拼音,读音等)
  7. AutoX披露无人车云代驾系统:夜晚远程操控车队也easy
  8. 【转】一些linux基础命令
  9. 异常为当IDENTITY_INSERT设置为OFF时 解决办法
  10. react项目案例_教程28——使用 react-rewired 配置基本的环境(项目)
  11. 做抖音自媒体,如何搭建自己的账号?
  12. 4.9冰箱的温度c语言,话说夏天冰箱温度调到多少度为最佳?
  13. Android Studio将本地计算机文件上传到模拟器scard文件中,显示不出
  14. [DAX] FORMAT函数
  15. 读书笔记-指数基金投资指南
  16. 崋佬论币;从哪里跌倒,就从哪里爬起来
  17. 深入理解计算机系统(CSAPP) attack-lab详解
  18. 测试人眼中的车联网(比亚迪云服务-3.2.1)——车辆定位、寻车
  19. 自变量选择与逐步回归——《应用回归分析R语言版》
  20. Revit二次开发---关于CAD翻模第一步

热门文章

  1. centos8安装搜狗输入法_搜狗拼音输入法去广告版
  2. su oracle c expdp,expdp/impdp 数据泵导入导出
  3. noj数据结构稀疏矩阵的加法十字链表_数据结构之:图
  4. IDBI的完整格式是什么?
  5. python 示例_带有示例的Python File close()方法
  6. 计算机中央处理器cpu_中央处理器(CPU)| 计算机科学组织
  7. Java BigInteger类| 带有示例的减去()方法
  8. python 幂运算 整数_在Python中检查一个数字是否是另一个数字的幂
  9. java javah_Java开发网 - 一个javah的问题
  10. linux需要什么基础,学linux需要什么基础?