banner使用

参考和引用链接

github地址

如果有不明确的地方,可以直接去github去查看明细
使用步骤

以下提供的是最简单的步骤,需要复杂的样式自己可以自定义
Step 1.依赖banner

Gradle

dependencies{
compile ‘com.youth.banner:banner:2.0.0-alpha02’ //预览版
}
或者引用本地lib

compile project(’:banner’)
Step 2.添加权限到你的 AndroidManifest.xml

Step 3.在布局文件中添加Banner,可以设置自定义属性

!!!此步骤可以省略,可以直接在Activity或者Fragment中new 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=“高度自己设置” />
Step 4.继承BannerAdapter,和RecyclerView的Adapter一样

/**

  • 自定义布局,下面是常见的图片样式,更多实现可以看demo,可以自己随意发挥
    */
    public class ImageAdapter extends BannerAdapter<DataBean, ImageAdapter.BannerViewHolder> {

    public ImageAdapter(List 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;
     }
    

    }
    }
    Step 5.Banner具体方法调用

public class BannerActivity extends AppCompatActivity {
public void useBanner() {
//--------------------------简单使用-------------------------------
//创建(new banner())或者布局文件中获取banner
Banner banner = (Banner) findViewById(R.id.banner);
//默认直接设置adapter就行了
banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()));

    //--------------------------详细使用-------------------------------
    banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()));
    banner.setIndicator(new CircleIndicator(this));
    banner.setIndicatorSelectedColorRes(R.color.main_color);
    banner.setIndicatorNormalColorRes(R.color.textColor);
    banner.setIndicatorGravity(IndicatorConfig.Direction.LEFT);
    banner.setIndicatorSpace(BannerUtils.dp2px(20));
    banner.setIndicatorMargins(new IndicatorConfig.Margins((int) BannerUtils.dp2px(10)));
    banner.setIndicatorWidth(10,20);
    banner.addItemDecoration(new MarginItemDecoration((int) BannerUtils.dp2px(50)));
    banner.setPageTransformer(new DepthPageTransformer());
    banner.setOnBannerListener(this);
    banner.addOnPageChangeListener(this);
    //还有更多方法自己使用哦!!!!!!
    
    //-----------------当然如果你想偷下懒也可以这么用--------------------
    //banner所有set方法都支持链式调用(以下列举了一些方法)
    banner.setAdapter(new BannerExampleAdapter(DataBean.getTestData()))
            .setOrientation(Banner.VERTICAL)
            .setIndicator(new CircleIndicator(this))
            .setUserInputEnabled(false);
}

}
Banner使用中优化体验

如果你需要考虑更好的体验,可以看看下面的代码

Step 1.(可选)生命周期改变时

public class BannerActivity {
@Override
protected void onStart() {
super.onStart();
//开始轮播
banner.start();
}

@Override
protected void onStop() {
    super.onStop();
    //结束轮播
    banner.stop();
}

}
Step 2.(可选)当RecyclerView嵌套Banner时,下面以Header举例

重写RecyclerView.Adapter里的方法,你也可以在销毁与创建时判断优化,下面采取的可见和不可见优化:

//当banner不可见时暂停
@Override
public void onViewDetachedFromWindow(@NonNull BaseViewHolder holder) {
super.onViewDetachedFromWindow(holder);
/**
* 下面的代码需要根据你的实际情况调整哦!
*/
//定位你的header位置
if (holder.getAdapterPosition()==0) {
if (getHeaderLayoutCount() > 0) {
//这里是获取你banner放的位置,这个根据你自己实际位置来获取,我这里header只有一个所以这么获取
Banner banner = (Banner) getHeaderLayout().getChildAt(0);
banner.stop();
}
}
}

//当banner可见时继续
@Override
public void onViewAttachedToWindow(BaseViewHolder holder) {
super.onViewAttachedToWindow(holder);
if (holder.getAdapterPosition()==0) {
if (getHeaderLayoutCount() > 0) {
Banner banner = (Banner) getHeaderLayout().getChildAt(0);
banner.start();
}
}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值