美文网首页
Android轮播(banner)组件的使用

Android轮播(banner)组件的使用

作者: SeekLife0 | 来源:发表于2021-12-22 22:43 被阅读0次

    Github: https://github.com/youth5201314/banner

    一、轮播组件进行图片的显示(常用)

    概述:轮播图片
    1、创建布局

    <com.youth.banner.Banner
    android:id="@+id/banner"
    android:layout_width="match_parent"
    android:layout_height="181dp"
    android:layout_marginHorizontal="11dp"
    android:layout_marginTop="10dp"
    //通过banner_radius属性来实现圆角
    app:banner_radius="10dp" />
    

    2、创建bean对象

    class ImageBean(var imageStr: String?)
    

    3、在activity中找到控件并进行操作

    //使用com.kongzue.baseframework来进行快捷开发
    @BindView(R.id.banner)  //找到对应组件
    //定义且添加对应的泛型,第一个为保存图片路径的类,第二个为自带的轮播适配器
    lateinit var mBannerView : Banner<ImageBean, BannerImageAdapter<ImageBean>>
    
    //绑定轮播图方法,传入图片链接数据
    fun bindBannerData(homeBanner: MutableList<IndexData.Data.HomeBannerData>) {
            //创建imgBean对象列表
            val imageList = mutableListOf<ImageBean>()
            //对列表进行装填
            for (item in homeBanner) {
                imageList.add(ImageBean(item.pic))
            }
            //通过setAdapter放置一个匿名内部类,在onBindView方法中通过Glide进行图片绑定
            mBannerView.setAdapter(object : BannerImageAdapter<ImageBean>(imageList) {
                override fun onBindView(
                    holder: BannerImageHolder?,
                    data: ImageBean?,
                    position: Int,
                    size: Int
                ) {
                    Glide.with(holder!!.itemView)
                        .load(data?.imageStr)
                        .apply(RequestOptions.bitmapTransform(RoundedCorners(30)))
                        .into(holder.imageView)
                }
            }//setIndicator可以设置轮播组件的指示器形状,这里是圆形。
            ).addBannerLifecycleObserver(this).setIndicator(CircleIndicator(me))
              //设置轮播的点击事件
              .setOnBannerListener(object : OnBannerListener<ImageBean> {
                    override fun OnBannerClick(data: ImageBean?, position: Int) {
                        when (position) {
                            0 -> {
    //                            jump(ProductsExhibitionActivity::class.java)
                            }
                            1 -> {
    //                            jump(ProductsExhibitionActivity::class.java)
                            }
                        }
                    }
                }).start()
     }
    

    4、在页面进行请求数据时调用bindBannerData进行轮播数据的绑定操作。

    二、轮播组件使用自定义布局进行显示

    概述:轮播的是自己定义的布局,可以显示各种控件。
    1、同样是创建布局

    2、创建bean对象

    //bean对象里的内容可以根据需求进行改变
    class ProductDetailImgBean {
        lateinit var img : String
    
        constructor(img : String) {
            this.img = img
        }
    }
    

    3、创建自己的轮播适配器

    class ProductDetailBannerAdapter : BannerAdapter<ProductDetailImgBean, ProductDetailBannerAdapter.BannerViewHolder> {
    
        //定义属性来存放使用该组件的activity对象,因为可能会涉及到跳转等操作
        lateinit var click : PackagedProductActivity
    
        //构造方法
        constructor(mDatas: MutableList<ProductDetailImgBean>, click: PackagedProductActivity) : super(mDatas) {
            this.click = click
        }
    
        //返回一个viewHolder实例,构建根布局。
        override fun onCreateHolder(parent: ViewGroup?, viewType: Int): BannerViewHolder {
            //创建一个相对布局,使用代码编写布局。
            var rl = RelativeLayout(parent?.context)
            var lp = RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.MATCH_PARENT
            )
            rl.layoutParams = lp
            return ProductDetailBannerAdapter.BannerViewHolder(rl)
        }
    
        //绑定对象方法,把Bean对象的数据绑定到viewHolder的根布局中。
        override fun onBindView(
            holder: BannerViewHolder?,
            data: ProductDetailImgBean?,
            position: Int,
            size: Int
        ) {
            //父布局relativeLayout
            var parent = holder?.rlView
            //将bean中的图片链接放入img然后填充满relativeLayout
            var imgView = ImageView(parent?.context)
            var lp = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
            imgView.layoutParams = lp
            imgView.scaleType = ImageView.ScaleType.FIT_XY
            //放入图片
            Glide.with(click).load(data?.img).into(imgView)
            parent?.addView(imgView)
            //轮播第一张图片添加VR字样
            if(position == 0){
                var vr = TextView(parent?.context)
                var lp = RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT
                )
                lp.addRule(RelativeLayout.CENTER_IN_PARENT)        //设置为布局居中位置
                vr.layoutParams = lp
                vr.text = "VR"
                vr.textSize = 50f
                vr.setTextColor(Color.parseColor("#FFFFFFFF"))
                //将子布局添加到父布局
                parent?.addView(vr)
                //且给第一个imgView添加点击事件。
                imgView.setOnClickListener(View.OnClickListener {
                    click.jump(VRPageActivity::class.java, JumpParameter().put("url", click.currentDetail.vrUrl))
                })
            }
        }
    
        //内部类,创建一个viewHolder,内部可以定义自己想要的根布局,这里是一个相对布局。
        class BannerViewHolder : RecyclerView.ViewHolder {
    
            lateinit var rlView: RelativeLayout
    
            constructor(rlView: RelativeLayout) : super(rlView) {
                this.rlView = rlView
            }
    
        }
    }
    

    4、在activity中进行操作。

        //绑定图片轮播
        fun bindFunctionBannerData(wholeBannerList : MutableList<String>) {
            //创建Bean对象列表
            var imageList = mutableListOf<ProductDetailImgBean>()
            for(item in wholeBannerList){
                imageList.add(ProductDetailImgBean(item))
            } //通过setAdapter放入自己写好的自定义适配器
            banner.addBannerLifecycleObserver(this).setAdapter(ProductDetailBannerAdapter(imageList,this))
                .setIndicator(RoundLinesIndicator(me),false).start()
        }
    

    相关文章

      网友评论

          本文标题:Android轮播(banner)组件的使用

          本文链接:https://www.haomeiwen.com/subject/ybrfqrtx.html