在上一节中我们简单的介绍了RecyclerView 的使用,他是整个开发的重点控件,这一节我们来看看FrameLayout 布局结合ViewPager2,开发一个广告控件。

新模块banner

先创建一个新的模块,取名为banner,用来创建我们的滚动广告条控件。


新建模块有一个好处就是模块是独立的,以后可以进行复用。

FrameLayout 帧布局

FrameLayout 布局主要是用在一些小控件上,他比较灵活,而且不会耗太多的资源。新建一个类,继承
FrameLayout

class BannerView @JvmOverloads constructor(context: Context,attrs: AttributeSet?, defStyleAttr: Int = 0) :FrameLayout(context,attrs,defStyleAttr)

我们的思路是这样的,在FrameLayout 中我们 放一个ViewPager2 的控件,这个控件 搭建一个适配器,就可以起到广告轮播的效果。

ViewPager2控件

FrameLayout 中,我们搭建了一个ViewPager2 ,和前面的RecyclerView 一样,他也需要搭建一个 适配器。

    inner class Adapter(var dataList:ArrayList<BannerInfo>):RecyclerView.Adapter<Adapter.ViewHolder>(){inner class ViewHolder(view:View):RecyclerView.ViewHolder(view){var pic:ImageView = view.findViewById(R.id.image_view1)}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {val view = LayoutInflater.from(parent.context).inflate(R.layout.item_banner_image,parent,false)val viewHolder = ViewHolder(view as View)return viewHolder;}override fun onBindViewHolder(holder: ViewHolder, position: Int) {val banner = dataList[position]holder.pic.setImageResource(banner.imageId)}override fun getItemCount(): Int {return dataList.size}}

适配器的构建原理和前面的章节就没有什么区别了,也就是跟界面进行绑定就可以了。

让他定时滚动起来:

        autoplayJob = viewScope.launch {while (true){if (viewPager.currentItem >= dataList.size-1){viewPager.setCurrentItem(0,true)}else{viewPager.setCurrentItem(viewPager.currentItem+1,true)}delay(3000)}}

在主界面的界面中,引入Banner控件

    <com.kotlin.banner.BannerViewandroid:id="@+id/bannerView1"android:layout_width="match_parent"android:layout_height="match_parent"

初始化控件:

var bfs:ArrayList<BannerInfo> = arrayListOf(BannerInfo(R.drawable.banner_1, displayText = "hello"),BannerInfo(R.drawable.banner_2, displayText = "hello"),BannerInfo(R.drawable.banner_3, displayText = "hello"))var bv:BannerView = findViewById(R.id.bannerView1)bv.setData(bfs)

小结

这节中,我们介绍了一个自定义布局,一个ViewPager2控件,组成了一个简单的轮播广告,这里的demo相对比较简单,还是同样的道理,这种控件还是直接用第三方的,功能丰富又好用,我们的例子只是拆分了一个原理出来而已。

Kotlin 开发Android app(十二):Android布局FrameLayout和ViewPager2控件实现滚动广告栏相关推荐

  1. 使用 jQuery Mobile 与 HTML5 开发 Web App (十二) —— jQuery Mobile 页面事件与 deferred

    在系列的上一篇文章<使用 jQuery Mobile 与 HTML5 开发 Web App -- jQuery Mobile 事件详解>中,Kayo 介绍了除页面事件外的其他 jQuery ...

  2. android 一分钟掌握圆形布局原理--圆形菜单控件 so easy

    前言:首先看看我们的两个demo效果,一个类似支付宝网格属性图,一个类似建行圆形菜单. 这两个效果,第一个涉及自定义view,第二个涉及ViewGroup.如果对于自定义view有一点了解实现起来都不 ...

  3. python点击屏幕坐标_Appium+python自动化(二十二)- 三个臭皮匠顶个诸葛亮-控件坐标获取(超详解)...

    简介 有些小伙伴或者是童鞋可能会好奇会问上一篇中的那个monkey脚本里的坐标点是如何获取的,不是自己随便蒙的猜的,或者是自己用目光或者是尺子量出来的吧,答案当然是:NO.获取控件坐标点的方式这里宏哥 ...

  4. Android开发系列(十二) QQ联系人列表升级版——ListView和ScrollView高阶使用方法...

    今天继续进行QQ界面的开发工作.前一段时间讲过ExpandableListView的使用并且设置了一个比较简单的具有子菜单效果的联系人列表,本节添加进ScrollView控件,对QQ2013版的联系人 ...

  5. 【Android项目实战 | 从零开始写app(十二)】实现app首页智慧服务热门推荐热门主题、新闻

    说在前面,由于各种adapter,xml布局,bean实体类,Activity,也为了让看懂,代码基本都是"简单粗暴直接不好看",没啥okhttp和util工具类之类的封装,本篇幅 ...

  6. Android Studio(十二):打包多个发布渠道的apk文件

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  7. android开发课程表app数据库,基于Android studio 的课程表增删查改功能(基于sqlite)

    [实例简介]Android studio 用SQLite实现课程表的增删查改功能,:实现详情浏览.编辑.及新增功能.课程编号可以实现正则检查(编号规则XX00000,XX表示两位大写的字母,00000 ...

  8. 20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业

    20189200余超 2018-2019-2 移动平台应用开发实践第十二周作业 服务 Service的声明 Service是Android中的四大组件,使用它一定要在AndroidManifest.x ...

  9. SAP UI5 应用开发教程之六十二 - 基于 OData V4 的 SAP UI5 表格控件使用方法介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. 为 Django admin 登录页添加验证码
  2. Metapath2vec:Scalable Representation Learning for Heterogeneous Networks(结构化深度网络特征表示)
  3. 如何在Linux上部署一个简单的Django项目
  4. Struts2学习笔记(十七) 文件下载(File Download)
  5. 查询很慢会导致锁表吗_MySQL的insert into select 引发锁表
  6. Fultter之Element和Widget对应关系解析
  7. FISCO BCOS Transaction execution error合约执行失败原因
  8. 用于网络销售的虚拟产品演示软件
  9. JAVA图灵 自动回复_实现微信公众号聊天机器人,自动回复——nodejs+图灵机器人...
  10. vue 数据看板大屏适配方案
  11. 区分英文句号和数字中的正则表达式
  12. OC桥接Swift学习记录
  13. Access Violation(非法访问)解析
  14. 大数据技术十大核心原理
  15. 18.11 项目:自动填表程序
  16. LTspice基础教程-009.LTspice波形测量
  17. ema matlab实现,用vba实现EMA函数
  18. 利用Matlab 由发动机map数据制作逆发动机map图
  19. 新农业@2022:人、平台和技术
  20. stc12串口收发计算机,STC12C5A60S2 串口中断接收程序

热门文章

  1. AM Best确认中国再保险(集团)股份有限公司及其子公司的信用评级
  2. qq空间音乐查询API|经纬度查询API|手机归属地API|Taobao API接口调用实例
  3. 【Linux系统管理】05 常用命令 06 vim编辑器
  4. 心形PCB补充一些小细节
  5. github上各个文件的意思
  6. Android实现自定义圆角边框渐变
  7. [exceptions]如何排查can not find symbol的编译错误
  8. bfd联动 cisco_BFD联动配置
  9. 预装绿坝,Linux何以为生?
  10. write tcp 127.0.0.1:53008->127.0.0.1:6379: use of closed network connection原因—Go连接Redis