自带小点轮播之XBanner

一、XBanner简介

        XBanner是一个非常优秀的无限自动轮播框架,也是一个控件。这里是XBanner的GitHub地址

        XBanner的主要功能如下:

  • 根据传入的数据条数自动调整广告页数
  • 当图片数量大于一张时,可以无限循环自动播放、手指按下停止轮播、抬起手指继续轮播
  • 可以自定义指示器的位置:左下角、下侧中间、右下角
  • 自定义指示点:正常状态和选中状态
  • 监听Item的点击事件
  • 支持设置图片轮播时间间隔
  • 可以设置指示器的背景及其显示/隐藏
  • 可以显示提示性文字并设置其颜色、大小
  • 支持改变图片切换动画,框架中默认支持10中动画
  • 可以设置图片切换动画的时长


二、XBanner用法

1、导入依赖

        使用XBanner框架之前,需要先导入其引用:在build.gradle文件中加入依赖,代码如下:

[html]  view plain  copy
  1. compile 'com.xhb:xbanner:1.2.2'  
  2. compile 'com.nineoldandroids:library:2.4.0'  
        由于XBanner中有可能从网络加载图片,因此也需要导入一些图片加载框架的依赖,如Glide,代码如下:

[html]  view plain  copy
  1. compile 'com.github.bumptech.glide:glide:3.7.0'  
  2. compile 'jp.wasabeef:glide-transformations:1.0.6'  

        如果是从网络加载数据,还需要在Manifest文件中注册网络访问权限,代码如下:

[html]  view plain  copy
  1. <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中布局文件中的代码如下:

[html]  view plain  copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:app="http://schemas.android.com/apk/res-auto"  
  3.     android:id="@+id/activity_main"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     android:orientation="vertical">  
  7.   
  8.     <com.stx.xhb.xbanner.XBanner  
  9.         android:id="@+id/banner"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="200.0dip"  
  12.         app:AutoPlayTime="3000"  
  13.         app:pointNormal="@drawable/shape_pointer_normal"  
  14.         app:pointSelect="@drawable/shape_pointer_selected"  
  15.         app:pointsContainerBackground="#44AAAAAA"  
  16.         app:pointsPosition="RIGHT"  
  17.         app:tipTextColor="#FFFFFFFF"  
  18.         app:tipTextSize="16.0sp" />  
  19.   
  20.       
  21.     <RadioGroup  
  22.         android:id="@+id/transforms"  
  23.         android:layout_width="match_parent"  
  24.         android:layout_height="wrap_content"  
  25.         android:orientation="vertical">  
  26.   
  27.         <RadioButton  
  28.             android:id="@+id/rb_default"  
  29.             android:layout_width="wrap_content"  
  30.             android:layout_height="wrap_content"  
  31.             android:checked="true"  
  32.             android:text="Default"  
  33.             android:textSize="16.0sp" />  
  34.   
  35.         <RadioButton  
  36.             android:id="@+id/rb_alpha"  
  37.             android:layout_width="wrap_content"  
  38.             android:layout_height="wrap_content"  
  39.             android:text="Alpha"  
  40.             android:textSize="16.0sp" />  
  41.   
  42.         <RadioButton  
  43.             android:id="@+id/rb_rotate"  
  44.             android:layout_width="wrap_content"  
  45.             android:layout_height="wrap_content"  
  46.             android:text="Rotate"  
  47.             android:textSize="16.0sp" />  
  48.   
  49.         <RadioButton  
  50.             android:id="@+id/rb_cube"  
  51.             android:layout_width="wrap_content"  
  52.             android:layout_height="wrap_content"  
  53.             android:text="Cube"  
  54.             android:textSize="16.0sp" />  
  55.   
  56.         <RadioButton  
  57.             android:id="@+id/rb_flip"  
  58.             android:layout_width="wrap_content"  
  59.             android:layout_height="wrap_content"  
  60.             android:text="Flip"  
  61.             android:textSize="16.0sp" />  
  62.   
  63.         <RadioButton  
  64.             android:id="@+id/rb_accordion"  
  65.             android:layout_width="wrap_content"  
  66.             android:layout_height="wrap_content"  
  67.             android:text="Accordion"  
  68.             android:textSize="16.0sp" />  
  69.   
  70.         <RadioButton  
  71.             android:id="@+id/rb_zoomfade"  
  72.             android:layout_width="wrap_content"  
  73.             android:layout_height="wrap_content"  
  74.             android:text="ZoomFade"  
  75.             android:textSize="16.0sp" />  
  76.   
  77.         <RadioButton  
  78.             android:id="@+id/rb_zoomcenter"  
  79.             android:layout_width="wrap_content"  
  80.             android:layout_height="wrap_content"  
  81.             android:text="ZoomCenter"  
  82.             android:textSize="16.0sp" />  
  83.   
  84.         <RadioButton  
  85.             android:id="@+id/rb_zoomstack"  
  86.             android:layout_width="wrap_content"  
  87.             android:layout_height="wrap_content"  
  88.             android:text="ZoomStack"  
  89.             android:textSize="16.0sp" />  
  90.   
  91.         <RadioButton  
  92.             android:id="@+id/rb_depth"  
  93.             android:layout_width="wrap_content"  
  94.             android:layout_height="wrap_content"  
  95.             android:text="Depth"  
  96.             android:textSize="16.0sp" />  
  97.   
  98.         <RadioButton  
  99.             android:id="@+id/rb_stack"  
  100.             android:layout_width="wrap_content"  
  101.             android:layout_height="wrap_content"  
  102.             android:text="Stack"  
  103.             android:textSize="16.0sp" />  
  104.     RadioGroup>  
  105. LinearLayout>  

3、绑定数据

        在Activity中通过XBanner控件在布局文件中的id属性找到控件,代码如下:

[java]  view plain  copy
  1. banner = (XBanner) findViewById(R.id.banner);  
        初始化XBanner中需要展示的数据,分为一个图片URL的集合和一个提示性文字的集合:

[java]  view plain  copy
  1. // 初始化XBanner中展示的数据  
  2. images = new ArrayList<>();  
  3. titles = new ArrayList<>();  
  4. images.add("http://img3.fengniao.com/forum/attachpics/913/114/36502745.jpg");  
  5. titles.add("这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片这是第1张图片");  
  6. images.add("http://imageprocess.yitos.net/images/public/20160910/99381473502384338.jpg");  
  7. titles.add("这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片这是第2张图片");  
  8. images.add("http://imageprocess.yitos.net/images/public/20160910/77991473496077677.jpg");  
  9. titles.add("这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片这是第3张图片");  
  10. images.add("http://imageprocess.yitos.net/images/public/20160906/1291473163104906.jpg");  
  11. titles.add("这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片这是第4张图片");  
        XBanner绑定数据并适配:

[java]  view plain  copy
  1. // 为XBanner绑定数据  
  2. banner.setData(images, titles);  
  3. // XBanner适配数据  
  4. banner.setmAdapter(new XBanner.XBannerAdapter() {  
  5.     @Override  
  6.     public void loadBanner(XBanner banner, View view, int position) {  
  7.         Glide.with(MainActivity.this).load(images.get(position)).into((ImageView) view);  
  8.     }  
  9. });  
        设置XBanner默认的页面切换动画及动画时长:

[java]  view plain  copy
  1. // 设置XBanner的页面切换特效  
  2. banner.setPageTransformer(Transformer.Default);  
  3. // 设置XBanner页面切换的时间,即动画时长  
  4. banner.setPageChangeDuration(1000);  
        当选中RadioGroup中的某个RadioButton时,切换XBanner的页面切换动画:

[java]  view plain  copy
  1. // RadioGroup中选中某个RadioButton时回调的方法  
  2. transforms.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {  
  3.     @Override  
  4.     public void onCheckedChanged(RadioGroup group, int checkedId) {  
  5.         switch (checkedId) {  
  6.             case R.id.rb_default:  
  7.                 banner.setPageTransformer(Transformer.Default);  
  8.                 break;  
  9.             case R.id.rb_alpha:  
  10.                 banner.setPageTransformer(Transformer.Alpha);  
  11.                 break;  
  12.             case R.id.rb_rotate:  
  13.                 banner.setPageTransformer(Transformer.Rotate);  
  14.                 break;  
  15.             case R.id.rb_cube:  
  16.                 banner.setPageTransformer(Transformer.Cube);  
  17.                 break;  
  18.             case R.id.rb_flip:  
  19.                 banner.setPageTransformer(Transformer.Flip);  
  20.                 break;  
  21.             case R.id.rb_accordion:  
  22.                 banner.setPageTransformer(Transformer.Accordion);  
  23.                 break;  
  24.             case R.id.rb_zoomfade:  
  25.                 banner.setPageTransformer(Transformer.ZoomFade);  
  26.                 break;  
  27.             case R.id.rb_zoomcenter:  
  28.                 banner.setPageTransformer(Transformer.ZoomCenter);  
  29.                 break;  
  30.             case R.id.rb_zoomstack:  
  31.                 banner.setPageTransformer(Transformer.ZoomStack);  
  32.                 break;  
  33.             case R.id.rb_stack:  
  34.                 banner.setPageTransformer(Transformer.Stack);  
  35.                 break;  
  36.             case R.id.rb_depth:  
  37.                 banner.setPageTransformer(Transformer.Depth);  
  38.                 break;  
  39.         }  
  40.     }  
  41. });  

4、点击事件

        当点击XBanner中的某一项时触发的事件:

[java]  view plain  copy
  1. // XBanner中某一项的点击事件  
  2. banner.setOnItemClickListener(new XBanner.OnItemClickListener() {  
  3.     @Override  
  4.     public void onItemClick(XBanner banner, int position) {  
  5.         Toast.makeText(MainActivity.this"点击了第" + (position + 1) + "张图片", Toast.LENGTH_SHORT).show();  
  6.     }  
  7. });  

5、与Activity生命周期联动

        当Activity失去焦点时立即停止自动轮播;当Activity获得焦点时才开始自动轮播。代码如下:

[java]  view plain  copy
  1. @Override  
  2. protected void onResume() {  
  3.     super.onResume();  
  4.     banner.startAutoPlay();  
  5. }  
  6.   
  7. @Override  
  8. protected void onStop() {  
  9.     super.onStop();  
  10.     banner.stopAutoPlay();  
  11. }  

6.为了更好的体验,建议在添加以下代码

  /** 为了更好的体验效果建议在下面两个生命周期中调用下面的方法 **/
    @Override
    protected void onResume() {
        super.onResume();
        mXBanner.startAutoPlay();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mXBanner.stopAutoPlay();
    }


        以上都是从GitHub的代码中学习总结的,留给自己看,也给作者宣传一下~~

你可能感兴趣的:(Xbanner)