BGABanner加载布局的实现,加载布局后不能自动轮播问题的解决

最近项目中遇到的头疼问题之一,加载两个布局之后不能自动轮播。
项目首页需要轮播展示两个项目,需要的是一种淡入淡出的动画效果,后来我就想到是用BGABanner来实现。项目轮播也是由它实现的,大概实现下面效果

动图中的推荐内容即是我今天要讲述的内容

如何实现

  1. 项目目录下,bulid.gradle中导入BGABanner
implementation 'cn.bingoogolapple:bga-banner:2.2.5@aar'
  1. 布局文件中,有几点要说明一下,因为不需要轮播的圆点,所以我这里都设置了点和背景都为透明色,淡入淡出动画效果设置为app:banner_transitionEffect=“fade”
<cn.bingoogolapple.bgabanner.BGABanner
                    android:id="@+id/banner_recommond"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:banner_pageChangeDuration="2000"
                    app:banner_pointAutoPlayAble="true"
                    app:banner_pointAutoPlayInterval="7000"
                    app:banner_pointContainerBackground="@android:color/transparent"
                    app:banner_pointDrawable="@drawable/selector_banner_point"
                    app:banner_transitionEffect="fade"/>
  1. 获取服务器数据后,得到list3,for循环生成的布局都可以添加到banner中
//viewpager页面
    List<View> viewPagerContentList = new ArrayList<View>();
    private BGABanner bannerRecommond;
public void addVpView() {
bannerRecommond = findViewById(R.id.banner_recommond);
View vpView;
                 viewPagerContentList.clear();
                 for (int i = 0; i < list3.size(); i++) { //获取viewpager界面所要添加的布局view
                     vpView = View.inflate(getActivity(), R.layout.view_pager_recom_item, null);
                     //获取viewpager界面所要添加的布局view中的textview并设置数据
                     ImageView iv = vpView.findViewById(R.id.iv_recom);
                     String recommondUrl = Constants.BASE_URL + "Upload/" + list3.get(i).getImg_url().replaceAll("\\\\", "");
                     Glide.with(getActivity())
                             .load(recommondUrl)
                             .asBitmap()
                             .placeholder(R.mipmap.tu)
                             .diskCacheStrategy(DiskCacheStrategy.ALL) //设置缓存
                             .into(new BitmapImageViewTarget(iv){
                                 @Override
                                 protected void setResource(Bitmap resource) {
                                     super.setResource(resource);
                                     RoundedBitmapDrawable circularBitmapDrawable =
                                             RoundedBitmapDrawableFactory.create(getActivity().getResources(), resource);
                                     circularBitmapDrawable.setCornerRadius(12); //设置圆角弧度
                                     iv.setImageDrawable(circularBitmapDrawable);
                                 }
                             });
                     TextView tvrata = vpView.findViewById(R.id.benjinNunber);
                     TextView zz = vpView.findViewById(R.id.lilvNumber);
                     TextView qx = vpView.findViewById(R.id.tv_fwzq);
                     TextView content = vpView.findViewById(R.id.xinZuYiCi);
                     tvrata.setText(list3.get(i).getRate() + "+");
                     zz.setText(list3.get(i).getExpect_rate() + "%");
                     qx.setText("服务租期: " + list3.get(i).getMonth() + "个月");
                     content.setText(list3.get(i).getName());
                     //添加到viewpager的数据中
                     viewPagerContentList.add(vpView);
                 }
                 initViewpager();
}

private void initViewpager() {

        bannerRecommond.setDelegate(new BGABanner.Delegate<LinearLayout, String>() {
            @Override
            public void onBannerItemClick(BGABanner banner, LinearLayout layout, String model, int position) {
                if (TextUtils.isEmpty(SharedPrefUtil.getString(getActivity(), Constants.TOKEN, ""))) {
                    showLoginDialog();
                    return;
                }
                Intent intent = new Intent(getActivity(), TenantProductServeActivity.class);
                intent.putExtra("recomdId", list3.get(position).getId());
                intent.putExtra("title", list3.get(position).getName());
                startActivity(intent);
            }
        });
        bannerRecommond.setData(viewPagerContentList);
    }
注:正常流程走下来确实能实现效果,但是发现不能自动轮播,这个问题处理起来就麻烦了,无论设置轮播时间还是网上查api都不能实现效果,网上也搜不到答案,后来在BGAqq群里发现有人遇到跟我一样的问题,是因为BGABanner加载布局时,viewpager数少于4个时则不能轮播
这是BGABanner的bug,原作者可能还没有将其解决掉。但是问题还是要解决的,我这里通过判断如果加载的布局数少于等于3时就把集合就再addAll()一遍原来的集合,使数量大于等于4,布局为1时则不考虑,而且也不影响轮播次序,问题解决
list3.addAll(list2);
if (list2.size() <= 3) {
  list3.addAll(list2);
}
希望我的答案能帮助到你们,有不清楚的地方可以在下方评论区留言
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值