Kotlin用Banner写一个上下滚动Text

android 必会之 ——用Banner写一个上下滚动的Text

前言

一般用来写搜索框里面的推荐

一、Banner

一般用来做轮播图,既然可以做轮播图,那轮播文字也没啥问题

1------效果

在这里插入图片描述

二、使用步骤

1.导入依赖

代码如下(示例):

  implementation 'com.youth.banner:banner:2.1.0'

导入依赖之后------ 4.2.2版本的studio 编译的时候会报错↓
在这里插入图片描述
说是超类不能解析, 百度了一下,应该是studio版本太高,banner版本太低,要导入一串代码
!!注意前后都不能有空格 不然会报错
在这里插入图片描述
用来解决版本问题

android.enableJetifier=true

2.布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <com.youth.banner.Banner
       android:id="@+id/main_ban"
       android:layout_width="match_parent"
       android:layout_height="100dp"
       ></com.youth.banner.Banner>

</LinearLayout>

3.实体类

package com.example.myapplication

class TextBanner_Entity {
    private var title:String ?= null
    //构造
    constructor(title: String?) {
        this.title = title
    }
}

4.适配器

package com.example.myapplication

import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.youth.banner.adapter.BannerAdapter
import com.youth.banner.util.BannerUtils

class TextBanner_Adapter : BannerAdapter<TextBanner_Entity, TextBanner_Adapter.TextBannerHolder> {
    /**
     * 构造方法来 传入数据集合
     */
    constructor(list: ArrayList<TextBanner_Entity>) : super(list) {

    }

    /**
     * 返回文字到banner
     */
    override fun onCreateHolder(parent: ViewGroup?, viewType: Int): TextBannerHolder {
        return TextBannerHolder(BannerUtils.getView(parent!!, R.layout.item_banner_text))
    }

    /**
     *设置文字内容
     */
    override fun onBindView(
        holder: TextBannerHolder,
        data: TextBanner_Entity,
        position: Int,
        size: Int
    ) {
        holder.title?.setText("" + data.title)
    }

    /**
     * 内部类  用来优化
     */
    class TextBannerHolder : RecyclerView.ViewHolder {
        var title: TextView? = null

        constructor(itemView: View) : super(itemView) {
            title = itemView.findViewById(R.id.news_text_title)
        }
    }
}

4.1适配器需要用的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <TextView
        android:id="@+id/news_text_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="#999" />
</LinearLayout>

5.Activity

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.youth.banner.Banner

class MainActivity : AppCompatActivity() {
    //找到banner
    private val mainBan: Banner<TextBanner_Entity, TextBanner_Adapter> by lazy {
        findViewById<Banner<TextBanner_Entity, TextBanner_Adapter>>(
            R.id.main_ban
        )
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //存放数据的集合
        var titlelist: ArrayList<TextBanner_Entity> = ArrayList()
        titlelist.add(TextBanner_Entity("测试1"))
        titlelist.add(TextBanner_Entity("测试2"))
        titlelist.add(TextBanner_Entity("测试3"))
        titlelist.add(TextBanner_Entity("测试4"))
        //初始化适配器
        var textbanAdapter = TextBanner_Adapter(titlelist)
        //设置适配器
        mainBan.setAdapter(textbanAdapter)
            .setOrientation(Banner.VERTICAL)//设置竖着动
            
        //开始播放  实际运用中  一定记得释放资源
        mainBan.start()
    }
}

总结

得到帮助的 帮忙点点 赞谢谢~


版权声明:本文为Darker_Li原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。