博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BannerView
阅读量:6573 次
发布时间:2019-06-24

本文共 6906 字,大约阅读时间需要 23 分钟。

一、前序

是一款Android轮播控件、引导页面滑动框架。支持有限、无限循环,可以自动、收动播放,支持自定义指示器,支持各种样式的自定义和多种图片类型,如Url、drawable加载。也可以选择酷炫切换动画的切换和自定义动画的扩张。是一款简单,易扩展、易使用框架。

虽然市面上已经有很多人在写这个图片轮播框架了,但是质量参差不齐,有很多功能都不全面,或多或少都由这样或者那样的问题。当然,也有不乏优秀的作品,其中,具有代表性的有和 youth5201314的两个banner框架。个人觉得这两个框架对于一般的需求是都可以满足的,但是也有点小问题:

1、banner框架:

1)对于非无限轮播不支持。
2)当用手指滑动页至不同页面时,当手指手动离开页面时,轮播图的位置没有处理好,还是手指滑动前的位置。3)banner框架是用的静态布局文件布局的,扩展性不好。
复制代码

2、BGABanner-Android:

1)对于图片的数据展示不能很好扩展。如用户图片想传静态的图片imageId或者drwable、或者url。
2)自定轮播次数是用的Integer的最大值,轮播次数受限制(这个可以满足正常需求)。
3)缓存机制做的不好。如动画缓存。
因此,为了更好的体验效果和框架的扩展性。自己整了这个框架[AlinBanner](https://github.com/Alin520/AlinBanner)。希望能解决大家在实际项目中的一些难缠的问题。好了,闲话休叙,直接上图了。复制代码

点击下载 或扫描下面的二维码安装

联系方式

github地址:https://github.com/Alin520/AlinBanner。  CSDN地址:http://blog.csdn.net/hailin123123/article/details/79266112  联系方式:  欢迎加入QQ群:707202045复制代码

一、效果展示

1、indicator指示器的展示。

支持圆形、数字、自定义的indicator。可以任意设置indicator的位置,

以及title的位置和字体等属性。

2、图片切换动画效果展示。

支持各种轮播切换动画效果,并且支持自定义动画。注意这里不是本文的重点

,所以动画效果展示的不多,因为网上这样的文章很多,直接拿来用就可以了。

3、滑动效果和引导图效果。

支持我们每个APP用到的引导图。支持无限轮播和非无限轮播,

以及无限轮播分为自动播放和手动播放效果。非无限轮播不支持自动播放,
只能支持手动播放。

二、功能介绍

  1. 支持多种格式的图片数据类型,如int型的ImageId、Drawable、String类型的Url。
  2. 支持自定义加载图片url方式,如Picasso、Fresco,默认是Glide。
  3. 支持无限轮播和有限轮播
  4. 支持手动播放(有限播放只能手动播放)和自动播放,且可自定义切换时间。
  5. 支持banner自定义切换动画方式。
  6. 支持indicator是数字类型、圆形指示器类型、自定义背景图片指示器类型和无indicator类型。
  7. 圆形指示器支持被选中的点和未选中的点大小一样、和被选中的点比未选中的点大小不一样,并且大小可以自定义设置。
  8. 支持indicator自定义参数,如indicator指示器位置(left、right、top、bottom、center)、内间距的padding、margin和指示点间的间距等参数。
  9. 支持bannerView的title展示,并且可以自定义title的文字大小、颜色、位置(left、right、center)等参数。
  10. 支持bannerView对每个ImageView的点击事件。
  11. 支持欢迎页引导图导航效果。
  12. 支持加载网络数据时设置占位图,避免出现整个广告条空白的情况

三、使用说明

step1、添加依赖( 必选)

dependencies {   implementation 'com.alin:bannerview:2.0.1'}    复制代码

step2、在布局文件中添加BannerView( 必选)

复制代码

step3、在 Activity 或者 Fragment 中配置 BannerView的数据( 必选)

本框架使用的是链式编程结构,美观、易懂。

mList = new ArrayList<>();                  //ImageView数据        mList.add(R.mipmap.banner_1);                   mList.add(R.mipmap.banner_2);        mList.add(R.mipmap.banner_3);                mTitles = new ArrayList<>();                //title数据        mTitles.add("第一页到货发动你的号看到回复");        mTitles.add("第二页佛挡");        mTitles.add("第三页大佛我as的后if好的搜iuuuu家的三");                mBannerView.setImages(mList)        //ImageView数据                .setIndcatorTitles(mTitles) //title数据                .start();                   //开始播放复制代码

step4、给BannerView添加点击的监听(可选)

mBannerView.setOnBannerClickListener(new OnBannerClickListener
() { @Override public void onBannerClickListener(BannerImageView imageView, Integer model, int position) { Toast.makeText(MainActivity.this,"第position=" + position + "被点击了,imageId=" + model,Toast.LENGTH_SHORT).show(); } });复制代码

注意:banner图点击监听的泛型指定

OnBannerClickListener类型需要与图片的数据类型保持一致。列如:setImages的图片数据是url的String类型,则泛型需要指定为String,若数据类型是Drawable,则泛型指定为Drawable。

step5、给BannerView根据不同的数据来源展示方式(可选)

本BannerView框架支持setImages的图片数据类型有常见的三种:Drawable、int(ImageId)、String(url)类型。

1)对于Drawable、int(ImageId)数据类型。直接设置mBannerView.setImages()即可。

2)对于String(url)类型,由于不同项目中使用的加载图片方式不一样,所以本框架提供了ImageLoaderInterface接口,支持自定义扩充。 默认是使用Glide加载url显示ImageView图片。
如果使用默认的,则直接跟上述一样设置数据即可。如果使用其他的图片加载方式,如Fresco、Picasso,则需要实现ImageLoaderInterface接口,并且需要指定泛型类型ImageLoaderInterface<数据类型String,BannerImageView需要显示的ImageView>,如果不使用默认的Glide,而用自定义的Picasso加载图片,具体如下:

//设置图片加载方式mBannerView.setImageLoader(new DisplayUrlImageView ())                      public class DisplayUrlImageView implements ImageLoaderInterface
{ @Override public BannerImageView createImageView(Context context) { return new BannerImageView(context); } @Override public void displayImageView(Context context, String path, BannerImageView imageView) { AppUtil.checkNotNull(path,"displayImageView path is null error!"); //Picasso 加载图片简单用法 Picasso.with(context).load(path).into(imageView); }}复制代码

step6、欢迎引导页,设置「跳过」和[进入]控件View(可选)

内部已经做了防止多次点击处理,以及indicator指示器、跳过、进入按钮的显示隐藏处理。直接设置setSkipOrEnterListener()监听即可使用。

TextView skipView = (TextView) findViewById(R.id.skip_tv);TextView enterView = (TextView) findViewById(R.id.enter_tv);//设置引导图的跳转、进入按钮        mBannerView.setSkipOrEnterListener(skipView, enterView, new BannerView.OnSkipOrEnterCallback() {            @Override            public void onSkipOrEnterCallback() {                startActivity(new Intent(WelcomeActivity.this, MainActivity.class));                finish();            }        });复制代码

四、属性说明

复制代码

五、可能遇到的问题说明

1、QA:设置BannerView的高度为自适应layout_height="wrap_content"时,bannerView布局高度为0?

解决方式:设置高度为layout_height="match_parent"或者具体的一个高度值即可

2、设置的Image的数据长度必须大于等于title的数据长度。 当设置的Image的数据长度是0时,展示的是默认的占位图,当数据长度是1时,bannerView是不能左右切换的。

3、 当bannerView设置setInfinite(false)为有限播放的时候,再设置setAutoPlay(true)自动播放是无效的。因为当bannerView为有限播放的时候,只能是手动播放。

4、报错Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex。

解决方式:因为你项目中也引用了v7包,只用删除本地引用的V7(com.android.support:appcompat-v7:26.1.0)包即可。

如果你觉得 能帮到你真正解决项目中的问题,就在博客中个我点个赞,或者去我的中star。 如果项目中有问题,可以直接给我留言

点击下载 或扫描下面的二维码安装

联系方式

github地址:https://github.com/Alin520/AlinBanner。  CSDN地址:http://blog.csdn.net/hailin123123/article/details/79266112  联系方式:  欢迎加入QQ群:707202045复制代码

转载于:https://juejin.im/post/5a7941c96fb9a0633f0dfe64

你可能感兴趣的文章
GitHub增加了代码审查、项目管理等新功能
查看>>
中台之上(五):业务架构和中台的难点,都是需要反复锤炼出标准模型
查看>>
安全狗:云时代的服务器安全守护者
查看>>
Hazelcast发布开源流处理引擎Jet
查看>>
苹果watchOS 2引入WatchKit应用,并扩展了硬件支持
查看>>
深入浅出TensorFlow(七)TensorFlow计算加速
查看>>
Facebook开源图像处理库Spectrum,优化移动端图像生成
查看>>
精通敏捷测试
查看>>
搞容器,必须考虑这五大安全要素
查看>>
从程序员到架构师的最佳技术成长之路
查看>>
为什么中台是传统企业数字化转型的关键?
查看>>
使用模板将Web服务的结果转换为标记语言
查看>>
inno setup 打包脚本学习
查看>>
php 并发控制中的独占锁
查看>>
禁止微信浏览器的下拉滑动
查看>>
从pandas到geopandas
查看>>
LOL设计模式之「策略模式」
查看>>
用express搭建网站
查看>>
使用kNN算法实现简单的手写文字识别
查看>>
ReactJS 开发过程中的一些使用心得
查看>>