图片轮播类似控件比较多,但是真正好用的比较少,大家公认的项目banner 是比较好用的,
但是作者已经很久没维护了,所以我在他的基础上优化了一部分,满足大家项目中常用的一些需求。
具体优化点:
1.优化了自定义布局,不仅仅是一张图片;
2.优化了 onPageSelected 方法调用两次的 bug;
3.增加了多种 banner 样式
模式 | 图片 |
---|---|
指示器模式 | ![]() |
数字模式 | ![]() |
数字加标题模式 | ![]() |
标题模式 | ![]() |
指示器加标题模式 | ![]() |
卡片模式 | ![]() |
自定义指示器模式 | ![]() |
自定义混合模式 | ![]() |
底部弧形模式 | ![]() |
指示器在外部 | ![]() |
右端缩进模式 | ![]() |
repositories {
jcenter()
maven { url 'https://jitpack.io' }
}
dependencies{
compile 'com.github.wenchaosong:Banner:2.2.9'
}
或者引用本地lib
compile project(':rollbanner')
<com.ms.banner.Banner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="高度自己设置" />
.setPages(list, new HolderCreator<BannerViewHolder>() {
@Override
public BannerViewHolder createViewHolder() {
return new CustomViewHolder();
}
})
class CustomViewHolder implements BannerViewHolder<String> {
private CardView mCardView;
private TextView mTextView;
@Override
public View createView(Context context) {
View view = LayoutInflater.from(context).inflate(R.layout.banner_item, null);
mCardView = (CardView) view.findViewById(R.id.group);
mTextView = (TextView) view.findViewById(R.id.position);
return view;
}
@Override
public void onBind(Context context, int position, String data) {
// 数据绑定
mCardView.setCardBackgroundColor(Color.parseColor(data));
mTextView.setText(position + "");
}
}
- 注意!start()方法必须放到最后执行
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Banner banner = (Banner) findViewById(R.id.banner);
banner.setAutoPlay(true)
.setPages(list, new HolderCreator<BannerViewHolder>() {
@Override
public BannerViewHolder createViewHolder() {
return new CustomViewHolder();
}
})
.start();
}
@Override
protected void onStart() {
super.onStart();
//开始轮播
banner.startAutoPlay();
}
@Override
protected void onStop() {
super.onStop();
//结束轮播
banner.stopAutoPlay();
}
-keep class com.ms.banner.** {*;}
属性 | 值 | 描述 |
---|---|---|
delay_time | integer | 轮播下一张图片的延迟时间 |
scroll_time | integer | 滚动到下一张图片的时间 |
is_auto_play | boolean | 是否自动轮播 |
is_loop | boolean | 是否循环 |
title_background | color、reference | title 的背景 |
title_textcolor | color | title 的字体颜色 |
title_textsize | dimension | title 的字体大小 |
title_height | dimension | title 的高度 |
indicator_width | dimension | 指示器的宽度 |
indicator_height | dimension | 指示器的高度 |
indicator_margin | dimension | 指示器到底部的距离 |
indicator_padding | dimension | 指示器之间的间距 |
indicator_drawable_selected | reference | 选中的指示器图片 |
indicator_drawable_unselected | reference | 未选中的指示器图片 |
banner_default_image | reference | 默认的图片 |
page_left_margin | dimension | 左边缩进的距离 |
page_right_margin | dimension | 右边缩进的距离 |
arc_height | dimension | 底部弧形的高度 |
arc_background | reference | 底部弧形的背景颜色 |
arc_direction | enum | 底部弧形的方向 |
setDelayTime 设置延迟时间
setAutoPlay 设置是否自动轮播
setLoop 设置是否循环
setIndicatorGravity 设置指示器位置
setBannerAnimation 设置滚动动画
setOffscreenPageLimit 设置页面个数
setBannerTitles 设置 title 数据
setBannerStyle 设置样式
setViewPagerIsScroll 设置是否可以滚动
setPages 设置数据源
update 刷新
updateBannerStyle 刷新样式
start 开始使用
setIndicatorRes 设置指示器资源
startAutoPlay 开始自动轮播
stopAutoPlay 停止轮播
setOnBannerClickListener 监听点击事件
setOnPageChangeListener 监听页面变化事件
releaseBanner 释放 banner
各个模式相应的代码 demo 中已经有了就不再重复,有问题可以提 issue