XBanner项目详情页转载

XBanner

在这里插入图片描述

主要功能:

  • 支持一屏显示多个
  • 支持自定义多布局,如:视频图片混合轮播
  • 支持根据服务端返回的数据动态设置广告条的总页数
  • 支持大于等于1页时的无限循环自动轮播、手指按下暂停轮播、抬起手指开始轮播
  • 支持自定义状态指示点位置 左 、中 、右
  • 支持自定义状态指示点
  • 支持监听页面点击事件
  • 支持设置图片轮播间隔
  • 支持指示器背景的修改及隐藏/显示
  • 支持显示提示性文字功能
  • 支持图片切换动画,目前支持10种切换动画,亦可设置自定义动画效果
  • 支持设置图片切换速度
  • 支持设置数字指示器
  • 支持设置图片框架整体占位图
  • 支持Glide/Fresco等主流图片加载框架加载图片
  • 支持自定义布局
  • 支持AndroidX

效果图

模式效果图
指示器模式在这里插入图片描述
数字模式在这里插入图片描述
数字加标题模式在这里插入图片描述
指示器加标题模式在这里插入图片描述
标题模式在这里插入图片描述
一屏多页模式在这里插入图片描述
一屏多页叠加模式在这里插入图片描述
一屏多页模式支持多种效果自定义在这里插入图片描述

Demo Apk

在这里插入图片描述

基本使用

1.添加 Gradle (以前是有的是Jecenter方式引入,由于国内被墙了,切换成JitPack方式引入,使用方式不变)

Jitpack

Add it in your root build.gradle at the end of repositories:

allprojects {
     repositories {
	...
	maven { url 'https://jitpack.io' }
     }
}

Step 2. Add the dependency

dependencies {

    //普通版本依赖
    implementation 'com.github.xiaohaibin:XBanner:1.8.9'
    //androidX 版本使用下面的依赖
    implementation 'com.github.xiaohaibin:XBanner:androidx_v1.2.6'
}
2.在清单文件中添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
3.在布局文件中添加 XBanner
    <com.stx.xhb.xbanner.XBanner
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/xbanner"
        android:layout_width="match_parent"
        android:layout_height="高度自定义"
        app:AutoPlayTime="3000"
        app:pointsContainerBackground="#44aaaaaa"
        app:pointNormal="@drawable/shape_noraml"
        app:pointSelect="@drawable/shape_selected"
        app:pointsPosition="RIGHT"
        app:tipTextSize="12sp"
        app:isShowNumberIndicator="true"
        app:isShowIndicatorOnlyOne="true"
        app:pageChangeDuration="800"/>
4.在 Activity 或者 Fragment 中配置

初始化:直接传入视图集合进行初始化

        //获取控件
        XBanner mXBanner = (XBanner) findViewById(R.id.xbanner);
	
	//代码设置框架占位图,也可在布局中设置
        mBanner.setBannerPlaceholderImg(R.mipmap.xbanner_logo, ImageView.ScaleType.CENTER_CROP);

       //添加轮播图片数据(图片数据不局限于网络图片、本地资源文件、View 都可以),刷新数据也是调用该方法
        mXBanner.setBannerData("轮播数据集合");//setData()方法已过时,推荐使用setBannerData()方法,具体参照demo使用

5.图片加载

可根据自己项目需要使用相应的图片加载工具进行加载图片,此处使用 Glide ,进行加载

      //加载广告图片
      mXBanner.loadImage(new XBanner.XBannerAdapter() {
            @Override
            public void loadBanner(XBanner banner, Object model, View view, int position) {

       //1、此处使用的Glide加载图片,可自行替换自己项目中的图片加载框架
       //2、返回的图片路径为Object类型,你只需要强转成你传输的类型就行,切记不要胡乱强转!
       Glide.with(MainActivity.this).load(((AdvertiseEntity.OthersBean)
      model).getThumbnail()).placeholder(R.drawable.default_image).error(R.drawable.default_image).into((ImageView) view);
            }
        });

6.监听广告 item 的单击事件
 mXBanner.setOnItemClickListener(new XBanner.OnItemClickListener() {
            @Override
            public void onItemClick(XBanner banner, Object model,View view, int position) {
                Toast.makeText(MainActivity.this, "点击了第"+position+"图片", Toast.LENGTH_SHORT).show();
            }
        });
7.使用 Fresco 加载图片时,需要自定义布局文件

1.自定义布局文件 R.layout.image_fresco

 <?xml version="1.0" encoding="utf-8"?>
 <com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  />

2.使用 setBannerData() 方法进行设置

  //setData()方法已过时,推荐使用setBannerData()方法,具体参照demo使用
  mXBanner.setBannerData(R.layout.image_fresco,“加载数据集合”);

  1. setBannerData 使用

setBannerData方法中的数据集合中的轮播实体类需要实现 BaseBannerInfo 接口,示例如下:

    public class CustomViewsInfo implements BaseBannerInfo {

        private String info;

        public CustomViewsInfo(String info) {
            this.info = info;
        }

        //轮播图片地址,本地图片就传本地资源的id,返回Int类型
        @Override
        public String getXBannerUrl() {
            return info;
        }

       //指示器文案
        @Override
        public String getXBannerTitle() {
            return "我是文案";
        }
    }
8.自定义布局

1.自定义自己需要展示的Banner显示布局,如:R.layout.customelayout

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tv"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:text="1"
    android:textSize="40dp"
    android:gravity="center"
    android:textColor="@android:color/white"
    android:background="@color/colorYellow"/>

2.使用 setBannerData() 方法进行设置

   mXBanner.setBannerData("自定义布局文件",“加载数据集合”);

3.设置数据,通过 loadImage() 方法回传的 View 根据自定义布局设置的Id找到相应的控件进行数据设置,具体请看 CustomViewsActivity

mBanner.loadImage(new XBanner.XBannerAdapter() {
               @Override
               public void loadBanner(XBanner banner, Object model, View view, int position) {
                   TextView tvContent = (TextView) view.findViewById(R.id.tv);
                   tvContent.setText(String.valueOf(position + 1));
                   view.setBackgroundColor(Color.parseColor((String) model));
               }
           });
9.多布局使用(具体请看VideoViewActivity
//创建轮播item 的ViewHolder
public class ImageViewHolder implements ViewHolder<CustomViewsInfo> {

    @Override
    public int getLayoutId() {
        return R.layout.layout_image_view;
    }

    @Override
    public void onBind(View itemView, CustomViewsInfo data, int position) {
        ImageView imageView = itemView.findViewById(R.id.iv);
        Glide.with(itemView.getContext()).load(data.getXBannerUrl()).placeholder(R.drawable.default_image).error(R.drawable.default_image).into(imageView);
    }
}
//创建 HolderCreator 在里面根据viewType实现多布局的逻辑
public class BannerHolderCreator implements HolderCreator<ViewHolder> {

    @Override
    public ViewHolder createViewHolder(int viewType) {
        if (viewType==0){
            return new VideoViewHolder();
        }
        return new ImageViewHolder();
    }

    @Override
    public int getViewType(int position) {
        return position;
    }
}
 //传 HolderCreator
 banner.setBannerData(“加载数据集合”, new BannerHolderCreator());

自定义属性说明

属性名属性说明属性值
isAutoPlay是否支持自动轮播boolean类型,默认为true
isTipsMarquee是否支持提示性文字跑马灯效果boolean类型,默认为false
AutoPlayTime图片轮播时间间隔int值,默认为5s
pointNormal指示器未选中时状态点drawable,不设置的话为默认状态点
pointSelect指示器选中时状态点drawable,不设置的话为默认状态点
pointsVisibility是否显示指示器boolean类型,默认为true
pointsPosition指示器显示位置LEFT、CENTER、RIGHT类型,默认为CENTER
pointsContainerBackground指示器背景可自定义设置指示器背景
pointContainerPosition指示器容器显示位置TOP、BOTTOM类型,默认为BOTTOM
pointContainerLeftRightPadding指示点容器左右内间距dimension,默认为10dp
pointTopBottomPadding指示点上下内间距dimension,默认为6dp
pointLeftRightPadding指示点左右内间距dimension,默认为3dp
tipTextColor提示文案的文字颜色reference
tipTextSize提示文案的文字大小dimension,默认为10dp
isShowNumberIndicator是否显示数字指示器boolean,默认为false不显示
numberIndicatorBacgroud数字指示器背景reference
isShowIndicatorOnlyOne当只有一张图片的时候是否显示指示点boolean,默认为false,不显示
isShowTips是否展示文字boolean,默认为false,不显示
pageChangeDuration图片切换速度int值,默认为1000ms
isHandLoop是否支持手动无限循环切换图片boolean类型,默认为false
placeholderDrawable设置整体轮播框架占位图reference
isClipChildrenMode是否开启一屏显示多个模式boolean类型,默认为false 默认不开启
clipChildrenLeftMargin一屏显示多个左间距dimension ,默认为30dp
clipChildrenRightMargin一屏显示多个右间距dimension ,默认为30dp
clipChildrenTopBottomMargin一屏显示多个上下间距dimension ,默认为30dp
viewpagerMarginviewpager页面间距dimension ,默认为10dp
isClipChildrenModeLessThree少于三张是否支持一屏多显模式boolean类型,默认为false 默认不开启
bannerBottomMarginbanner轮播区域底部margin,可设置指示器距离轮播图的间距dimension ,默认为0dp
scaleType设置占位图缩放类型scaleType类型
showIndicatorInCenter设一屏多显模式下 指示器是否显示在中间图片位置,默认显示中间boolean类型
isClickSide一屏多显模式下 是否支持点击侧边切换图片,默认开启boolean类型

混淆配置

##XBanner 图片轮播混淆配置
-keep class com.stx.xhb.xbanner.**{*;}

Q&A

  • 1.一屏显示多个模式默认使用ScalePageTransformer切换动画,也可以自定义;自定义动画添加方法setCustomPageTransformer(自定义动画效果);

  • 2.一屏显示多个模式默认是会缩放左右两个页面,若想左右页面与中间页面保持一致,把切换动画设置成自己自定义的就可以;

  • 3.图片不显示问题

    1)确认是否实现了 loadImage() 方法,需要使用自己的图片加载框架加载图片!!!
    2)请把加载图片地址复制到浏览器看看是否打开图片,确认图片地址是否正确!!!

  • 4.AndroidX模式配置问题
    https://blog.csdn.net/qq_17766199/article/details/81433706

  • 5.一屏显示多个模式开启没效果,请确认图片资源是否少于三张,如果少于三张依然需要一屏多显模式可通过 isClipChildrenModeLessThree 属性设置,该属性默认为false;

关于XBanner作者

转载自GitHub XBanner 项目,仅做交流学习使用,如有侵权,请私信联系我删除

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值