Banner:自动轮播广告控件,支持交互和自定义界面,可自动轮播,手指触摸停止,手指拿开恢复轮播:

原博客地址:https://blog.csdn.net/weixin_40400031/article/details/103458554

引言:最近做了一款广告轮播banner,可以支持自动轮播,手指触摸停止,手指移开恢复轮播,支持高度自定义布局和交互事件,使用builder链式写法,使用简单


github地址: https://github.com/bigdongdong/Banner


项目配置

  allprojects {
      repositories {
          ...
          maven { url 'https://jitpack.io' }  //添加jitpack仓库
      }
  }
  
  dependencies {
	  implementation 'com.github.bigdongdong:Banner:4.1' //添加依赖
  }

使用方式

private List<String> banners ;


/**
 * 设置banner底部指示点 ... 的样式
 */
PointsOptions options = new PointsOptions.Builder()
        .count(banners.size())              //点的数量
        .marginBottom(30)                   //点距离底部的距离(px)
        .selectedColor(Color.WHITE)         //当前广告页对应的点的颜色
        .unSelectedColor(Color.GRAY)        //非当前广告页对应点的颜色
        .space(10)                          //点与点之间的间隔(px)
        .width(15)                          //点的宽高尺寸(px),点为圆形
        .build();

/**
 * 创建banner
 */
banner = new Banner.Builder()
        .context(this)
        .banners(banners)             //设置banner列表数据,List
        .layoutStyle(Banner.LAYOUT_STYLE_IMAGEVIEW)                //提供一个ImageView
//        .layoutStyle(Banner.LAYOUT_STYLE_RELATIVELAYOUT)         //提供RelativeLayout,可以高度自定义布局
        .playStyle(Banner.PLAY_STYLE_JUST_GO)                      //无限循环播放
//        .playStyle(Banner.PLAY_STYLE_JUST_ONCE)                  //播放一次,播放完停留在最后一张
        .stayDuration(800)                                         //每张广告页停留时间(毫秒)
        .animDuration(500)                                         //广告切换的时间(毫秒)
        .isDisplayPoints(true)                                     //是否显示底部指示点,默认显示
        .pointsOptions(options)                                    //设置底部的指示点
        /**
         * 设置广告页监听
         *    第一个泛型对应layoutStyle:
         *      (Banner.LAYOUT_STYLE_IMAGEVIEW 对应 ImageView)
         *      (Banner.LAYOUT_STYLE_RELATIVELAYOUT 对应 RelativeLayout)
         *    第二个泛型是banners传的list中的泛型
         */
        .onSelectedListener(new OnSelectedListener<ImageView,String>() {
            @Override
            public void onSelectedListener(ImageView iv, String url, int position) {
                //可以使用任意框架加载布局
                Glide.with(MainActivity.this).load(url).into(iv);
                //给view设置交互监听
                iv.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                    }
                });
            }
        })
        .build();

parentLayout.addView(banner); //将banner add进准备好的父布局
        
        

 /**
   * 在onStart中开启轮播,在onDestory中停止轮播,避免内存泄漏
   */

  @Override
  protected void onStart() {
      super.onStart();
      if(banner != null){
          banner.start();
      }
  }

  @Override
  protected void onStop() {
      super.onStop();
      if(banner != null){
          banner.stop();
      }
  }

你可能感兴趣的:(Android,移动开发,开发随笔)