【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 用于访问另一个的数据,或者共 ...
 
随机推荐
- 协程的作用 Python
			
1.协程的含义和实现 协程是单进程单线程的超越函数的调度机制,它通过一定的调度手段进行调度. (Python使用generator机制,greenlet使用汇编控制对程序指向来实现). 2.协程有什么 ...
 - ListView复用和优化详解
			
我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率,而内部实现的一种优化,牺牲一点内存.而 ...
 - Object之魔术函数__call() 处理错误调用
			
在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.上代码: <?php class Person{ function say(){ echo " ...
 - Global & Local Variable in Python
			
Following code explain how 'global' works in the distinction of global variable and local variable. ...
 - ERROR 2003 (HY000): Can't connect to MySQL server
			
http://blog.csdn.net/longxibendi/article/details/6363934 一.问题的提出 /usr/local/webserver/mysql/bin/mysq ...
 - iOS: 学习笔记, 透过Boolean看Swift(译自: https://developer.apple.com/swift/blog/ Aug 5, 2014  Boolean)
			
透过Boolean看Swift 一个简单的Bool类型内部就包含了许多Swift主要功能, 如何构建一个简单类型是有趣的演示. 本文将创建一个与Bool类型在设计与实现上非常相似的新MyBool类型. ...
 - Linux内存映射(mmap)系列(1)
			
看到同事的代码中出现了mmap.所以自己私下学习学习,研究研究..... http://www.cnblogs.com/lknlfy/archive/2012/04/27/2473804.html ( ...
 - 写了几天的博客-feel
			
写博客 真的总结我自己的知识.长见识了.记录下自己遇到的东西,算是一个总结,有问题了,还可以回头看一下.很好 真的很好.
 - scrollview 例子2
			
代码: #import "RootViewController.h" @implementation RootViewController @synthesize scrollVi ...
 - 打log
			
如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...