一、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的使用的更多相关文章

  1. Android 框架简介--Java环境(转)

    ==========================上=========================== 这里简单的介绍了Android的java环境基础,在后面一节中会结合具体的实例来理解这一节 ...

  2. 【Android - 框架】之GreenDao的使用

    上一篇博客([Android - 框架]之ORMLite的使用)中介绍了ORMLite的基本使用,今天我们来研究以下GreenDao的使用. GreenDao和ORMLite一样,都是基于ORM(Ob ...

  3. 【Android - 框架】之Retrofit+RxJava的使用

    前几天分别对Retrofit和RxJava进行了总结,这个帖子打算把Retrofit结合RxJava使用的方法总结以下.有还不了解Retrofit或RxJava的朋友可以参考下面的帖子学习~ [And ...

  4. IOS 与ANDROID框架及应用开发模式对照一

    IOS 和ANDROID操作系统都是眼下流行的移动操作系统,被移动终端和智能设备大量採用,两者都採用了先进的软件技术进行设计,为了方便应用开发两者都採用了先进的设计模式. 两者在框架设计上都採用了什么 ...

  5. Kotlin的扩展函数:扩展Android框架(KAD 08)

    作者:Antonio Leiva 时间:Jan 11, 2017 原文链接:https://antonioleiva.com/extension-functions-kotlin/ 扩展函数是Kotl ...

  6. App 组件化/模块化之路——Android 框架组件(Android Architecture Components)使用指南

    面对越来越复杂的 App 需求,Google 官方发布了Android 框架组件库(Android Architecture Components ).为开发者更好的开发 App 提供了非常好的样本. ...

  7. 【Android 系统开发】Android框架 与 源码结构

    一. Android 框架 Android框架层级 : Android 自下 而 上 分为 4层; -- Linux内核层; -- 各种库 和 Android运行环境层; -- 应用框架层; -- 应 ...

  8. IOS 与ANDROID框架及应用开发模式对比一

    IOS 和ANDROID操作系统都是目前流行的移动操作系统,被移动终端和智能设备大量采用,两者都采用了先进的软件技术进行设计,为了方便应用开发两者都采用了先进的设计模式.两者在框架设计上都采用了什么技 ...

  9. Android 框架式编程 —— 起篇

    一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...

  10. android 框架层 常用类介绍

    名称 功能描述 示意图 activitymanager 管理应用程序的周期并提供常用的回退功能 window manager 窗口管理者 content provider 用于访问另一个的数据,或者共 ...

随机推荐

  1. Android Studio中JNI -- 1 -- 配置方法

    1.配置NDK 1.1 下载NDK Android Studio 1.2 配 android-ndk-r10e,不同版本的Studio需要配置不同的ndk,下载完成后,随便解压放至某个文件目录下 1. ...

  2. Windows phone 之样式的关联

    建议大家做界面要用Blend. 做过web的都知道DIV+CSS,给页面元素关联样式有三种方式: 1.内联样式表:就是在每个元素里面写style.优点就是灵活,给指定的元素添加样式.缺点是重用性很差, ...

  3. Django练习项目之搭建博客

    背景:自从今年回家过年后,来到公司给我转了试用,我的学习效率感觉不如从前,而且刚步入社会我总是想要怎么想明白想清楚一些事,这通常会花掉,消耗我大量的精力,因为我想把我的生活管理规划好了,而在it技术学 ...

  4. [CSS]cursor鼠标样式

     用css控制鼠标样式的语法如下: <span style="cursor:*">文本或其它页面元素</span>  把 * 换成如下15个效果的一种:   ...

  5. 序列化魔术函数__sleep()和反序列化魔术函数__wakeup()

    1.string serialize ( mixed $value )— 产生一个可存储的值的表示 serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方. ...

  6. python中的buildin函数详解(第一篇)

    这会是很长的一个帖子,因为我打算从python最基础的东西开始,尝试去完全的掌握它,buildin中有一些常用的函数比如 abs, open, setattr, getattr, 大家都很了解他们的用 ...

  7. win7下配置IIS服务器方法

    网站爱好初学者必看的win7系统配置自己的IIS,可以在你自己的电脑上配置网站服务器发不到网上,下面就跟着我的步骤一起做吧100%成功. 步骤方法 1.点击开始-------控制面板这个就是打开的控制 ...

  8. java环境变量设置方法

    1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:\java\jdk1.5.0_08:    2.安装完成后,右击“我的电脑”,点击“属性”:         3.选择“高 ...

  9. Gems

    zoj2332:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2332 题意:这一道题的题意,我看了很久,也没有看明白,最终 ...

  10. 【UVALive - 5131】Chips Challenge(上下界循环费用流)

    Description A prominent microprocessor company has enlisted your help to lay out some interchangeabl ...