網站首頁 編程語言 正文
在上一節中我們簡單的介紹了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.BannerView android: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
相對比較簡單,還是同樣的道理,這種控件還是直接用第三方的,功能豐富又好用,我們的例子只是拆分了一個原理出來而已。
原文鏈接:https://blog.csdn.net/weixin_40425640/article/details/127925968
相關推薦
- 2022-05-21 基于C++實現酒店管理系統_C 語言
- 2023-07-16 uni-app 自定義組件之星級評價分數
- 2022-09-24 利用Python編寫簡易的錄制屏幕小工具_python
- 2022-07-02 Python使用?TCP協議實現智能聊天機器人功能_python
- 2023-02-26 Golang時間處理中容易踩的坑分析解決_Golang
- 2023-07-27 TypeScript類和多態、抽象類、訪問修飾符
- 2022-04-29 WPF自定義路由事件_實用技巧
- 2022-10-04 Redis分布式鎖之紅鎖的實現_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支