日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Kotlin?FrameLayout與ViewPager2控件實現滾動廣告欄方法_Android

作者:go2coding ? 更新時間: 2023-01-02 編程語言

在上一節中我們簡單的介紹了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

欄目分類
最近更新