【Android - 框架】之XBanner的使用
一、XBanner简介
XBanner是一个非常优秀的无限自动轮播框架,也是一个控件。这里是XBanner的GitHub地址
XBanner的主要功能如下:
- 根据传入的数据条数自动调整广告页数
- 当图片数量大于一张时,可以无限循环自动播放、手指按下停止轮播、抬起手指继续轮播
- 可以自定义指示器的位置:左下角、下侧中间、右下角
- 自定义指示点:正常状态和选中状态
- 监听Item的点击事件
- 支持设置图片轮播时间间隔
- 可以设置指示器的背景及其显示/隐藏
- 可以显示提示性文字并设置其颜色、大小
- 支持改变图片切换动画,框架中默认支持10中动画
- 可以设置图片切换动画的时长
二、XBanner用法
1、导入依赖
使用XBanner框架之前,需要先导入其引用:在build.gradle文件中加入依赖,代码如下:
compile 'com.xhb:xbanner:1.2.2'
compile 'com.nineoldandroids:library:2.4.0'
由于XBanner中有可能从网络加载图片,因此也需要导入一些图片加载框架的依赖,如Glide,代码如下:
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'jp.wasabeef:glide-transformations:1.0.6'
如果是从网络加载数据,还需要在Manifest文件中注册网络访问权限,代码如下:
<uses-permission android:name="android.permission.INTERNET" />
2、布局
XBanner控件的部分属性如下表所示:
| 属性名 | 属性说明 | 属性值 |
|---|---|---|
| isAutoPlay | 是否支持自动轮播 | boolean类型,默认为true |
| autoPlayTime | 图片轮播事件间隔 | int类型,默认5000ms |
| pointNormal | 指示器未选中时的状态 | drawable类型,不指定的话使用默认状态点 |
| pointSelect | 指示器选中时的状态 | drawable类型,不指定的话使用默认状态点 |
| pointsVisible | 是否显示指示器 | boolean类型,默认为true |
| pointsPosition | 指示点位置 | CENTER、LEFT、RIGHT,默认CENTER |
| pointsContainerBackground | 指示器条背景 | color类型、drawable类型、mipmap类型等 |
| pointContainerPosition | 指示器条位置 | TOP、BOTTOM,默认BOTTOM |
| pointContainerLeftRightPadding | 指示点容器左右内间距 | dimension类型,默认10.0dip |
| pointTopBottomPadding | 指示点上下内间距 | dimension类型,默认6.0dip |
| pointLeftRightPadding | 指示点左右内间距 | dimension类型,默认3.0dip |
| tipTextColor | 提示文字的颜色 | reference类型 |
| tipTextSize | 提示文字的大小 | dimension类型,默认10.0dp |
本DEMO中布局文件中的代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <com.stx.xhb.xbanner.XBanner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="200.0dip"
app:AutoPlayTime="3000"
app:pointNormal="@drawable/shape_pointer_normal"
app:pointSelect="@drawable/shape_pointer_selected"
app:pointsContainerBackground="#44AAAAAA"
app:pointsPosition="RIGHT"
app:tipTextColor="#FFFFFFFF"
app:tipTextSize="16.0sp" /> <!-- 翻页动画单选按钮组 -->
<RadioGroup
android:id="@+id/transforms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <RadioButton
android:id="@+id/rb_default"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="Default"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_alpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Alpha"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_rotate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Rotate"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_cube"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cube"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_flip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Flip"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_accordion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Accordion"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_zoomfade"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ZoomFade"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_zoomcenter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ZoomCenter"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_zoomstack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ZoomStack"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_depth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Depth"
android:textSize="16.0sp" /> <RadioButton
android:id="@+id/rb_stack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stack"
android:textSize="16.0sp" />
</RadioGroup>
</LinearLayout>
3、绑定数据
在Activity中通过XBanner控件在布局文件中的id属性找到控件,代码如下:
banner = (XBanner) findViewById(R.id.banner);
初始化XBanner中需要展示的数据,分为一个图片URL的集合和一个提示性文字的集合:
// 初始化XBanner中展示的数据
images = new ArrayList<>();
titles = new ArrayList<>();
images.add("http://img3.fengniao.com/forum/attachpics/913/114/36502745.jpg");
titles.add("这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片");
images.add("http://imageprocess.yitos.net/images/public/20160910/99381473502384338.jpg");
titles.add("这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片");
images.add("http://imageprocess.yitos.net/images/public/20160910/77991473496077677.jpg");
titles.add("这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片");
images.add("http://imageprocess.yitos.net/images/public/20160906/1291473163104906.jpg");
titles.add("这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片");
XBanner绑定数据并适配:
// 为XBanner绑定数据
banner.setData(images, titles);
// XBanner适配数据
banner.setmAdapter(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, View view, int position) {
Glide.with(MainActivity.this).load(images.get(position)).into((ImageView) view);
}
});
设置XBanner默认的页面切换动画及动画时长:
// 设置XBanner的页面切换特效
banner.setPageTransformer(Transformer.Default);
// 设置XBanner页面切换的时间,即动画时长
banner.setPageChangeDuration(1000);
当选中RadioGroup中的某个RadioButton时,切换XBanner的页面切换动画:
// RadioGroup中选中某个RadioButton时回调的方法
transforms.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_default:
banner.setPageTransformer(Transformer.Default);
break;
case R.id.rb_alpha:
banner.setPageTransformer(Transformer.Alpha);
break;
case R.id.rb_rotate:
banner.setPageTransformer(Transformer.Rotate);
break;
case R.id.rb_cube:
banner.setPageTransformer(Transformer.Cube);
break;
case R.id.rb_flip:
banner.setPageTransformer(Transformer.Flip);
break;
case R.id.rb_accordion:
banner.setPageTransformer(Transformer.Accordion);
break;
case R.id.rb_zoomfade:
banner.setPageTransformer(Transformer.ZoomFade);
break;
case R.id.rb_zoomcenter:
banner.setPageTransformer(Transformer.ZoomCenter);
break;
case R.id.rb_zoomstack:
banner.setPageTransformer(Transformer.ZoomStack);
break;
case R.id.rb_stack:
banner.setPageTransformer(Transformer.Stack);
break;
case R.id.rb_depth:
banner.setPageTransformer(Transformer.Depth);
break;
}
}
});
4、点击事件
当点击XBanner中的某一项时触发的事件:
// XBanner中某一项的点击事件
banner.setOnItemClickListener(new XBanner.OnItemClickListener() {
@Override
public void onItemClick(XBanner banner, int position) {
Toast.makeText(MainActivity.this, "点击了第" + (position + 1) + "张图片", Toast.LENGTH_SHORT).show();
}
});
5、与Activity生命周期联动
当Activity失去焦点时立即停止自动轮播;当Activity获得焦点时才开始自动轮播。代码如下:
@Override
protected void onResume() {
super.onResume();
banner.startAutoPlay();
} @Override
protected void onStop() {
super.onStop();
banner.stopAutoPlay();
}
以上都是从GitHub的代码中学习总结的,留给自己看,也给作者宣传一下~~
【Android - 框架】之XBanner的使用的更多相关文章
- Android 框架简介--Java环境(转)
==========================上=========================== 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节 ...
- 【Android - 框架】之GreenDao的使用
上一篇博客([Android - 框架]之ORMLite的使用)中介绍了ORMLite的基本使用,今天我们来研究以下GreenDao的使用. GreenDao和ORMLite一样,都是基于ORM(Ob ...
- 【Android - 框架】之Retrofit+RxJava的使用
前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下.有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~ [And ...
- IOS 与ANDROID框架及应用开发模式对照一
IOS 和ANDROID操作系统都是眼下流行的移动操作系统,被移动终端和智能设备大量採用,两者都採用了先进的软件技术进行设计,为了方便应用开发两者都採用了先进的设计模式. 两者在框架设计上都採用了什么 ...
- Kotlin的扩展函数:扩展Android框架(KAD 08)
作者:Antonio Leiva 时间:Jan 11, 2017 原文链接:https://antonioleiva.com/extension-functions-kotlin/ 扩展函数是Kotl ...
- App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南
面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本. ...
- 【Android 系统开发】Android框架 与 源码结构
一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...
- IOS 与ANDROID框架及应用开发模式对比一
IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式.两者在框架设计上都采用了什么技 ...
- Android 框架式编程 —— 起篇
一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...
- android 框架层 常用类介绍
名称 功能描述 示意图 activitymanager 管理应用程序的周期并提供常用的回退功能 window manager 窗口管理者 content provider 用于访问另一个的数据,或者共 ...
随机推荐
- 关于Java IM的一点资料
微信是腾讯采用自己开发的协议做的,其他市面上很多产品大都是采用XMPP协议,包括米聊在内之前也是这样子. 采用XMPP协议,服务端可以采用OpenFire搭建,客户端有个开源的叫asmack的东西,g ...
- VBA开发经验总结之二:灵活运用工作表属性
近期,在帮公司写一个销售管理的工具,高强度的开发激发了我对一些以前既有方式的看法,特将几点开发经验总结在此. 1.将工作表及窗体的公共变量及特征变量写为工作表或窗体的属性.此种方法的优点: ① 采用面 ...
- Ubuntu 下 安装QQ 截图工具
1.由于ubuntu下是没有dll动态链接库的,所以需要安装一个软件wine,有这个东西之后,以后在ubuntu下就可以运行exe文件了.(wine是一款优秀的Linux系统平台下的模拟器软件,用来将 ...
- Python疑问系列
最近在看python源码 ------点点滴滴做个记录. 预计要分的系列: 1. import 分析 2. 主要bytecode 分析 3. python启动分析 4. object对象分析 最后希望 ...
- UIActionViewController 详解 iOS8
iOS8推出了几个新的“controller”,主要是把类似之前的UIAlertView变成了UIAlertController,这不经意的改变,貌似把我之前理解的“controller”一下子推翻了 ...
- Java实现http服务器(一)
基于Java实现Http服务器有多种多样的方法 一种轻量级的方式是使用JDK内置的com.sun.net.httpserver包下和sun.net.httpserver包下类提供的方法构建,该方法轻便 ...
- StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全
StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全 一.StartSSL个人证书登录申请 1.StartSSL官网: 1.官方首页:http://www.startssl.com/ 2 ...
- Initializing Spring root WebApplicationContext
最近 我部署ssh项目的时候经常出现这样的问题,我的解决办法是 log4j:WARN No appenders could be found for logger (org.springframewo ...
- Condition 的使用
Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set ...
- 嵌入式C语言头文件的建立与使用
如何正确编写 C 语言头文件和与之相关联的 c 源程序文件,这首先就要了解它们的各自功能. 要理解 C 文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程. 一般说来编译器会做以下几 ...