android github轮播图,GitHub - ZTJzzz/Banner: Android轮播图

Android轮播图 - Banner

纵观Android古今,轮播图已然泛滥成灾!大神们各显神通大兴土木,所起楼台之高让后来者心生膜拜,纷纷Star!但不法分子也是层出不穷,为求"大神"的桂冠,挂羊头卖狗肉,一个镜像就试图去名满天下,鄙人正是此等不法分子!虽有点盗窃youth5201314前辈的劳动成果,但也算是实实在在在前辈的肩膀上干了点实在事——帮前辈梳了梳头,整理了一下发型。毕竟盲仔说过:头可断,发型不能乱。但是在下还是得由衷感谢youth5201314前辈,您造的法拉利我至少给您保养了一番!

功能特点

支持一屏三页

支持任意View显示在Banner上

支持自定义显示器

支持多种Banner动画

支持仿魅族Banner

空数据、两条数据优化处理

创建的View内部已做缓存,性能更佳

一句话:更加精简,更加智能,更加好用!!!

有图有真相

2748b68b3fbc1172dfd61484aca5750d.png

28b4b3b26590560113e561279135339a.png

1d9ccbe7860532140d87602182eb1c21.png

1288a3aab8a5706237a55f2bcb09e0c6.png

9056ffc75fad49ad43307e2f3460cdc0.png

新增仿魅族Banner

33bc0ed9add2cf0b12b7ad03828e0978.png

简单用法

1.添加依赖:

1.1 工程的build.gradle下添加:

maven { url 'https://jitpack.io' }

1.2 模块的build.gradle下添加:

implementation 'com.github.AlpsDog:Banner:v1.0.6'

如果你的项目为: AndroidX

请在 gradle.properties 中添加:(如果已经添加请忽略)

android.useAndroidX=true

android.enableJetifier=true

2.XML布局文件

android:id="@+id/banner"

android:layout_width="match_parent"

android:layout_height="200dp"

android:layout_marginTop="20dp"

app:banner_auto_play="true"

app:banner_default_image="@drawable/banner_default"

app:banner_expose_width="20dp"

app:banner_interval_time="5000"

app:banner_multi_anim="ScaleIn"

app:banner_page_spacing="14dp"

app:banner_scroll_time="1000"

app:banner_show_indicator="true"

app:banner_show_model="Multi"

app:layout_scrollFlags="scroll" />

3.在Activity/Fragment中

// 1. 创建设置BannerLoader

banner.setBannerLoader(new ImageLoader() {

@Override

public void loadView(Context context, BannerEntry entry, int position, View imageView) {

RequestOptions requestOptions = new RequestOptions()

.placeholder(R.drawable.banner_default)

.error(R.drawable.banner_default)

.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC);

Glide.with(context).load(entry.getBannerPath()).apply(requestOptions).into((ImageView) imageView);

}

});

// 2 设置页面点击事件

banner.setOnBannerClickListener(new Banner.OnBannerClickListener() {

@Override

public void onBannerClick(int position) {

Toast.makeText(BaseUseActivity.this, "点击了:" + position, Toast.LENGTH_SHORT).show();

}

});

// 3 翻页事件

banner.setBannerPagerChangedListener(new Banner.OnBannerSimplePagerListener() {

@Override

public void onPageSelected(int position) {

Log.d("hsl777", "onPageSelected: ==>" + position);

}

});

// 4 最重要一步,加载数据

banner.loadImagePaths(mData);

非常重要之处

此处添加可以优化Banner体验

但是一旦启用自动轮播,必须调用 banner.stopAutoPlay();

可以在onResume()、也可以在onDestory(),

这样才能确保轮播任务停止

防止内存泄漏

@Override

protected void onResume() {

super.onResume();

banner.startAutoPlay();

}

@Override

protected void onPause() {

super.onPause();

banner.stopAutoPlay();

}

4.数据源说明

// Banner内部定义的数据接口

public interface BannerEntry {

/**

* 获取Banner数据源

*

* @return

*/

T getBannerPath();

/**

* 获取指示器文本

*

* @return

*/

String getIndicatorText();

}

// 实体类继承此接口

// getBannerPath()返回图片加载的源

// getIndicatorText()返回Banner摘要,非必须

public class BannerItem implements BannerEntry {

private Object path;

private String indicatorText;

public BannerItem() {

}

public BannerItem(Object path, String indicatorText) {

this.path = path;

this.indicatorText = indicatorText;

}

@Override

public Object getBannerPath() {

//此处返回图片加载的源,可以是 URL RES FILE...

return path;

}

@Override

public String getIndicatorText() {

//此处返回Banner摘要,非必须

return indicatorText;

}

public Object getPath() {

return path;

}

public void setPath(Object path) {

this.path = path;

}

public void setIndicatorText(String indicatorText) {

this.indicatorText = indicatorText;

}

}

5.加载器说明

//自定义Banner显示的View时,可用此加载器

public interface BannerLoader {

/**

* 加载VIEW

*

* @param context

* @param entry

* @param position 显示的位置

* @param imageView

*/

void loadView(Context context, BannerEntry entry, int position, V imageView);

/**

* 创建View

*

* @param context

* @param position

* @return

*/

V createView(Context context, int position);

}

//简化版加载器

public abstract class ImageLoader implements BannerLoader {

@Override

public ImageView createView(Context context, int position) {

ImageView imageView = new ImageView(context);

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

return imageView;

}

}

//关于怎样自定义Banner显示的View,可参考Demo

6.自定义属性说明

banner_auto_play : 能否自动轮播

banner_show_model : 显示模式(一屏一页、一屏三页、仿魅族Banner)

banner_interval_time : 轮播间隔

banner_scroll_time : 翻页时长(决定翻页的速度)

banner_single_anim : 一屏一页动画

banner_default_image : 数据为空时,默认显示图

banner_expose_width : 一屏三页,左右两页露出的宽度

banner_page_spacing : 一屏三页,页间距

banner_multi_anim : 一屏三页动画

banner_mz_overlap : 仿魅族Banner时,中间Page压着左右两边page的宽度

banner_mz_anim : 仿魅族Banner动画

banner_show_indicator : 是否显示指示器

indicator_select_width : 选中的指示器宽度

indicator_select_height : 选中的指示器高度

indicator_default_width : 未选中指示器宽度

indicator_default_height : 未选中指示器高度

indicator_space : 指示器间隔

indicator_margin_bottom : 指示器距底部距离

indicator_select_drawable : 指示器选中的样式

indicator_default_drawable : 指示器未选中样式

版本说明

v1.0.6正式版

1.修复一张图刷新为多张图是时,显示问题

2.修复多张图刷为一张图时,崩溃问题

v1.0.4正式版

1.修复一张图时,使用glide崩溃问题

v1.0.3正式版

1.空数据优化

2.频繁刷新优化

v1.0.2正式版

新增仿魅族Banner

v1.0.1正式版

1.对内部结构进行了优化

2.增加数据源接口,规范使用

V1.0.0正式版

1.轮播图使用示例

2.轮播图LIB源码

鸣谢

感谢张鸿洋大师的ViewPager一屏三页动画

感谢大家对鄙人的支持

linshao.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值