RxBanner
一个灵活可制定的基于 Recyclerview 的轮播图控件,支持自动轮播,无限循环。 同时可关闭无限循环变成 引导页 ,带有引导完成接口回调
Install / Use
/learn @leveychen/RxBannerREADME
RxBanner
[停止维护]
一个灵活可制定的基于 Recyclerview 的轮播图控件,支持自动轮播,无限循环。
同时可关闭无限循环变成 引导页 ,带有引导完成接口回调,详见demo
更新日志
1.1.3
1.完善一些点击事件的逻辑
2.新增当 rb_canSwipe = false 时的点击事件响应
3.修复 自定义指示器 刷新数据时没有默认选中的问题
1.1.2
1.新增 引导页 监听 RxBannerGuideFinishedListener ,调整引导页功能实现
2.新增单张图片时可否滑动设置 rb_canSwipeWhenSingle, 仅单张图片时有效
1.1.1
1.新增滑动阻尼设置 rb_flingDamping, 阻尼越大滑动越困难,默认为RecyclerView标准最小滑动值. 修复 issues #2
2.新增自定义指示器,用法与说明请下翻至 指示器 部分, 由 CircleIndicator 修改整合,感谢原作者, 原始需求 issues #3
Demo Apk
fir.im rxbanner_demo.apk
github rxbanner_demo.apk
预览


引用
1.添加 jitpack
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
2.导入引用 
implementation 'com.github.leveychen:RxBanner:1.1.4'
依赖出错问题
由于本项目采用28.0.0-rc02的版本编译,28以下版本可能会出现依赖失败的情况,处理办法如下:
在 app.gradle 最下面添加
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
//这里指定需要统一的依赖版本,这里统一为27.1.1,这里以27.1.1为例
details.useVersion '27.1.1'
}
}
}
}
强制使用你的主项目的编译版本
用法
layout
see Attributes
<cn.levey.bannerlib.RxBanner
android:id="@+id/rx_banner"
android:layout_width="match_parent"
android:layout_height="160dp"/>
java
banner = findViewById(R.id.rx_banner);
banner
.setLoader(new ImageLoader()) // see `image loader`
.setConfig(config) // see `config`
.setDatas(iamgesUrls, titles)
.start();
一些 image loader 的栗子
Fresco Glide Picasso UniversalImageLoader
可以愉快的玩耍了,下面是一些可选内容
配置信息 -可选
自定义配置信息,所有参数设置均和 xml 布局里一致,优先级高于 xml 布局文件
RxBannerConfig config = banner.getConfig();
config.set(value);
...
banner.setConfig(config);
banner.start();
setConfig() 必须在 setDatas() 和 start() 之前设置。
监听器 -可选
点击图片时的回调
banner.setOnBannerClickListener(new RxBannerClickListener())
onItemClick(int position, Object data)
onItemLongClick(int position, Object data)
//点击标题时的回调
banner.setOnBannerTitleClickListener(new RxBannerTitleClickListener())
onTitleClick(int position, String title);
//图片切换时的回调
banner.setOnBannerChangeListener(new RxBannerChangeListener())
onBannerSelected(int position)
onBannerScrollStateChanged(int state)
//一旦定义引导页监听就可变成引导页
banner.setOnGuideFinishedListener(new RxBannerGuideFinishedListener()
onGuideFinished()
生命周期
更好的 在 Activity 、 Fragment 和其他 view 中管理生命周期
banner.onResume()
banner.onPause()
banner.onDestroy()
全局设置 -可选
RxBannerConfig
.getInstance()
.setDebug(true) // debug: default false
.setScrollStateChangedListener(new RxBannerScrollStateChangedListener()
.setLoader(new RxBannerImageViewLoader())
.setOrientation(LinearLayout.HORIZONTAL)
.setOrderType(RxBannerConfig.OrderType.ASC)
.setTimeInterval(5000);
引导页
定义一下布局就行了
为了更好的引导页体验,最好关闭无限循环和自动轮播
banner:rb_infinite="false"
banner:rb_autoPlay="false"
然后监听一下回调
banner.setOnGuideFinishedListener(new RxBannerGuideFinishedListener()
onGuideFinished()
// todo
大功告成
属性
所有属性均以 rb_ 开头
Banner
|属性|格式|初始值|描述
|---|---|---|---|
|rb_autoPlay|boolean|true|以 rb_timeInterval 的间隔自动播放
|rb_infinite|boolean|true|是否无限循环,关闭无限循环并且设置引导页回调即可变成引导页
|rb_canSwipe|boolean|true|是否允许手动滑动,此设置与自动轮播无关
|rb_canSwipeWhenSingle|boolean|true|单张图片时是否能手动滑动,此设置与自动轮播无关
|rb_aspectRatio|float|/| 宽高比,数值必须大于0,拿16:9为例就是1.7778,高度等于宽度则为1,同时 android:layout_height 不能为 wrap_content 或者 match_parent。需要随便定义一个数值, 比如 1dp。当 orientation = vertical 且在ScrollView中时,高度不推荐大于父容器,否则可能滑动被拦截,导致且在ScrollView中时无法滑动
|rb_timeInterval|integer (millisecond)|5000| 200毫秒以上
|rb_orientation|horizontal / vertical|horizontal| /
|rb_itemPercent|integer|100| 宽度或者高度的百分比,取决于 rb_orientation 方向
|rb_itemScale|float|1|缩放比
|rb_itemSpace|dimension|0|两个item之间的间距
|rb_centerAlpha|float|1|中间 item 透明度
|rb_sideAlpha|float|1|旁边 item 透明度
|rb_itemMoveSpeed|float|1|滑动速度
|rb_flingDamping|float|1|滑动阻尼,越大越不容易滑动
|rb_orderType|asc / desc|asc| 升序或者降序排列
|rb_viewPaperMode|boolean|true|跟 ViewPaper 一样,一次滑动一页
|rb_emptyViewText|string|'暂无图片'| 当图片为空且 'rb_emptyViewResource' 没有定义时
|rb_emptyViewResource|reference| / | 当图片为空时显示
标题
|属性|格式|初始值|描述 |---|---|---|---| |rb_title_visible|boolean|true| / |rb_title_gravity|gravity|START| / |rb_title_layout_gravity|gravity|CENTER_HORIZONTAL and BOTTOM| / |rb_title_margin|dimension|0dp| margin |rb_title_padding|dimension|3dp| padding |rb_title_width|dimension / enum|MATCH_PARENT| / |rb_title_height|dimension / enum|WRAP_CONTENT| / |rb_title_size|dimension|14sp| / |rb_title_color|color|Color.WHITE| / |rb_title_backgroundColor|color|#55000000| / |rb_title_backgroundResource|reference| / | / |rb_title_marquee|boolean|true| 跑马灯 |rb_title_lineSpacingMultiplier|float|1.0f| lineSpacingMultiplier
指示器
|属性|格式|初始值|描述
|---|---|---|---|
|rb_indicator_visible|boolean|true| /
|rb_indicator_clickable|boolean|true| 是否可以点击指示器来切换banner
|rb_indicator_orientation|horizontal / vertical|horizontal|/
|rb_indicator_layout_gravity|gravity|BOTTOM / END|/
|rb_indicator_radius|dimension|5dp|指示器大小
|rb_indicator_textSize|dimension|14sp|numeric numeric_circle 专用
|rb_indicator_textColor|color|Color.WHITE|numeric numeric_circle 专用
|rb_indicator_backgroundColor|color|/|numeric numeric_circle 专用
|rb_indicator_backgroundResource|reference|/|numeric numeric_circle 专用
|rb_indicator_scale|float|0.7| scale or scale_down 专用
|rb_indicator_margin|dimension|8dp| margin
|rb_indicator_padding|dimension|3dp| padding
|rb_indicator_selected_color|color|#FFFFFF| /
|rb_indicator_unselected_color|color|#33FFFFFF| /
|rb_indicator_interactiveAnimation|boolean|false| /
|rb_indicator_animationDuration|integer|350|毫秒
|rb_indicator_animationType|type|none|see AnimationType
|rb_indicator_rtl_mode|on / off / auto|auto|支持左右自动布局 RTL
|rb_indicator_selectedResource|reference|/| custom 专用,用法参考 CircleIndicator
|rb_indicator_unselectedResource|reference|/| custom 专用,用法参考 CircleIndicator
|rb_indicator_animatorResource|reference|/|custom 专用,用法参考 CircleIndicator
|rb_indicator_animatorReverseResource|reference|/|custom 专用,用法参考 CircleIndicator
AnimationType
这里抄的,了解一下 PageIndicatorView / CircleIndicator
|名称|属性| 预览
|---|---|---
|AnimationType.NONE|none|
|AnimationType.COLOR|color |
|AnimationType.SCALE|scale |
|AnimationType.SCALE_DOWN|scale_down|
|AnimationType.SLIDE|slide|
|AnimationType.WORM|worm|
|AnimationType.FILL|fill|