第一步在build.gradle(app)中添加
dependencies {
//开源轮播控件
implementation 'com.youth.banner:banner:2.0.7'
//谷歌官网 recyclerview
implementation 'androidx.recyclerview:recyclerview:1.1.0'
//开源图片加载框架 提供图片的缓存
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
第二步在AndroidManifest.xml
<!--网络请求权限-->
<uses-permission android:name="android.permission.INTERNET"/>
第三步 在布局文件中添加Banner,可以设置自定义属性
<!--轮播-->
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="高度自己设置"/>
第四步 防止运行轮播报错java的1.8的错误,强制指定java的1.8语言
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
第五步 继承BannerAdapter,和RecyclerView的Adapter一样
/**
* BannerBean类 存放的是一些自定义关闭图片的get,set方法
*/
Public class HomeBannerAdapter extends BannerAdapter
<BannerBean, HomeBannerAdapter.BannerViewHolder> {
//定义上下文
private Context context;
//构造函数 传递数据到适配器
public HomeBannerAdapter(List<BannerBean> mDatas,Context context) {
//设置数据,也可以调用banner提供的方法,或者自己在adapter中实现
super(mDatas);
this.context=context;
}
//布局图片绑定
@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,BannerBean data, int position, int size) {
//holder.imageView.setImageResource(data.imageRes);
//通过服务器获取图片的实际路径
String imageUrl= ServiceUrls.getMainPageBannerImgUrl(data.getBannerPicture());
//使用Glide加载图片 最简单的用户
Glide.with(context)
.load(imageUrl)
.into(holder.imageView);//图片加载给到imageView
}
//控制每一张图片
//RecyclerView 需要添加implementation 'androidx.recyclerview:recyclerview:1.1.0'
class BannerViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public BannerViewHolder(@NonNull ImageView view) {
super(view);
this.imageView = view;
}
}
}
第六步 Banner方法调用
//获取控件
private Banner bannerHomeHeader;//轮播顶部
//获取控件
bannerHomeHeader = view.findViewById(R.id.banner_home_header);
bannerHomeHeader.setAdapter(new HomeBannerAdapter(bannerList,mActivityContext))
.setIndicator(new CircleIndicator(mActivityContext))//设置指示器
.setIndicatorSelectedColorRes(R.color.colorPrimary)//设置当前轮播指示器的颜色
.isAutoLoop(true)//允许自动轮播
.setDelayTime(5*1000)//设置轮播切换间隔 5s
//设置轮播点击事件
.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(Object data, int position) {
//参数:轮播绑定的数据,轮播图片的索引
BannerBean bannerBean= (BannerBean) data;
Toast.makeText(mActivityContext,String.valueOf(bannerBean.getBannerId()),Toast.LENGTH_SHORT).show();
}
})
.start();
效果: