效果图
导入依赖
implementation 'com.youth.banner:banner:1.4.10' //轮播图
布局
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="15dp"
android:layout_marginRight="15dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
逻辑代码
Banner banner = getActivity().findViewById(R.id.banner);//拿到控件引用
//定义一个方法去初始化Banner控件
private void bannerView1(){//获取本地图片的轮播
List<Integer> images = new ArrayList<>();//存放轮播的图片
//在本地获取图片资源
images.add(R.drawable.a);
images.add(R.drawable.b);
images.add(R.drawable.c);
//设置banner样式
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
//设置banner动画效果
banner.setBannerAnimation(Transformer.DepthPage);
//设置图片加载器
banner.setImageLoader(new HeadFragment.GlideImageLoader());
//设置图片集合
banner.setImages(images);
//设置自动轮播,默认为true
banner.isAutoPlay(true);
//设置轮播时间
banner.setDelayTime(2000);
//小点点居中
banner.setIndicatorGravity(BannerConfig.CENTER);
//banner设置方法全部调用完毕时最后调用
banner.start();
}
private void bannerView2(){//获取网络图片的轮播
//放图片地址的集合
list_path = new ArrayList<>();
//放标题的集合
list_title = new ArrayList<>();
list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic21363tj30ci08ct96.jpg");
list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic259ohaj30ci08c74r.jpg");
list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2b16zuj30ci08cwf4.jpg");
list_path.add("http://ww4.sinaimg.cn/large/006uZZy8jw1faic2e7vsaj30ci08cglz.jpg");
list_title.add("好好学习");
list_title.add("天天向上");
list_title.add("热爱劳动");
list_title.add("不搞对象");
//设置内置样式,共有六种可以点入方法内逐一体验使用。
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
//设置图片加载器,图片加载器在下方
banner.setImageLoader(new MyLoader());
//设置图片网址或地址的集合
banner.setImages(list_path);
//设置轮播的动画效果,内含多种特效,可点入方法内查找后内逐一体验
banner.setBannerAnimation(Transformer.Default);
//设置轮播图的标题集合
banner.setBannerTitles(list_title);
//设置轮播间隔时间
banner.setDelayTime(3000);
//设置是否为自动轮播,默认是“是”。
banner.isAutoPlay(true);
//设置指示器的位置,小点点,左中右。
banner.setIndicatorGravity(BannerConfig.CENTER)
//以上内容都可写成链式布局,这是轮播图的监听。比较重要。方法在下面。
.setOnBannerListener(this)
//必须最后调用的方法,启动轮播图。
.start();
}
//轮播图的监听方法
@Override
public void OnBannerClick(int position) {
Log.i("tag", "你点了第"+position+"张轮播图");
}
//自定义的图片加载器
private class MyLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load((String) path).into(imageView);//这个是Glide框架加载网络图片,和下面的二选一即可
imageView.setImageResource((Integer) path);//加载本地文件
}
/**
* 自定义圆角类
* @param context
* @return
*/
@Override
public ImageView createImageView(Context context) {
RoundImageView img = new RoundImageView(context);
return img;
}
}
圆角类
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
public class RoundImageView extends androidx.appcompat.widget.AppCompatImageView {
float width,height;
public RoundImageView(Context context) {
this(context, null);
}
public RoundImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public RoundImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
if (Build.VERSION.SDK_INT < 18) {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
width = getWidth();
height = getHeight();
}
@Override
protected void onDraw(Canvas canvas) {
if (width > 12 && height > 12) {
Path path = new Path();
path.moveTo(25, 0);
path.lineTo(width - 25, 0);
path.quadTo(width, 0, width, 25);
path.lineTo(width, height - 25);
path.quadTo(width, height, width - 25, height);
path.lineTo(25, height);
path.quadTo(0, height, 0, height - 25);
path.lineTo(0, 25);
path.quadTo(0, 0, 25, 0);
canvas.clipPath(path);
}
super.onDraw(canvas);
}
}