美文网首页Android自定义控件Android开源库
Android-推荐一个好用的Banner库

Android-推荐一个好用的Banner库

作者: 阿博聊编程 | 来源:发表于2022-02-07 16:11 被阅读0次
    图片来源于网络

    之前做商城类App的时候,会遇到多个Banner需求,那么我们有没有办法快速实现Banner呢?答案是有的,具体怎么做请看我下面的分享。

    Banner引入

    implementation('io.github.youth5201314:banner:2.2.2')
    

    截止写博客的时间,最新的版本是2.2.2。需要注意的是2.1.0版本之后,仓库地址变成:

    repositories {
        maven { url "https://s01.oss.sonatype.org/content/groups/public" }
    }
    

    必须添加这个仓库地址,否则编译器会报错的。Banner仓库的地址,最新版本可以这里查看

    Banner使用范例

    1.XML显示Banner控件

    <com.youth.banner.Banner
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp" />
    

    我在开发的项目当中的,高度是200dp。看文章的小伙伴可以根据自己的需要来自定义哈。

    2.创建Banner适配器

    /**
     * 自定义布局,下面是常见的图片样式,更多实现可以看demo,可以自己随意发挥
     */
    public class ImageAdapter extends BannerAdapter<DataBean, ImageAdapter.BannerViewHolder> {
    
        public ImageAdapter(List<DataBean> mDatas) {
            //设置数据,也可以调用banner提供的方法,或者自己在adapter中实现
            super(mDatas);
        }
    
        //创建ViewHolder,可以用viewType这个字段来区分不同的ViewHolder
        @Override
        public BannerViewHolder onCreateHolder(ViewGroup parent, int viewType) {
            ImageView imageView = new ImageView(parent.getContext());
            //注意,必须设置为match_parent,这个是viewpager2强制要求的
            imageView.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            return new BannerViewHolder(imageView);
        }
    
        @Override
        public void onBindView(BannerViewHolder holder, DataBean data, int position, int size) {
            holder.imageView.setImageResource(data.imageRes);
        }
    
        class BannerViewHolder extends RecyclerView.ViewHolder {
            ImageView imageView;
    
            public BannerViewHolder(@NonNull ImageView view) {
                super(view);
                this.imageView = view;
            }
        }
    }
    

    仓库的作者有提示到:这一步其实可以省略,因为有提供默认的适配器,特殊业务处理就需要自己去处理自定义一下。

    3.Banner的调用代码

    public class BannerActivity extends AppCompatActivity {
        public void useBanner() {
            //--------------------------简单使用-------------------------------
            banner.addBannerLifecycleObserver(this)//添加生命周期观察者
                    .setAdapter(new BannerExampleAdapter(DataBean.getTestData()))
                    .setIndicator(new CircleIndicator(this));
            
            //—————————————————————————如果你想偷懒,而又只是图片轮播————————————————————————
             banner.setAdapter(new BannerImageAdapter<DataBean>(DataBean.getTestData3()) {
                        @Override
                        public void onBindView(BannerImageHolder holder, DataBean data, int position, int size) {
                            //图片加载自己实现
                            Glide.with(holder.itemView)
                                 .load(data.imageUrl)
                                 .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))
                                 .into(holder.imageView);
                        }
                    })
                    .addBannerLifecycleObserver(this)//添加生命周期观察者
                    .setIndicator(new CircleIndicator(this));
            //更多使用方法仔细阅读文档,或者查看demo
        }
    }
    

    关于Banner的使用优化

    方法一:自己控制banner的生命周期

    public class BannerActivity  extends BaseActivity{
        
        @Override
        protected void onStart() {
            super.onStart();
            //开始轮播
            banner.start();
        }
        
        @Override
        protected void onStop() {
            super.onStop();
            //停止轮播
            banner.stop();
        }
        
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //销毁
            banner.destroy();
        }
    }
    

    方法二:调用banner的addBannerLifecycleObserver()方法,让banner自己控制

    public class BannerActivity extends BaseActivity{  
        protected void onCreate(Bundle savedInstanceState) {
             //添加生命周期观察者
            banner.addBannerLifecycleObserver(this);
        }
    }
    

    相关文章

      网友评论

        本文标题:Android-推荐一个好用的Banner库

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