BGABanner-Android 引导、图片轮播控件的高级使用

使用BGABanner-Android 实现 同时显示当前view的前一页和后一页
BGABanner-Android是github上的一个开源的引导、图片轮播控件,github传送门:BGABanner-Android
这里使用该控件如何实现如下图的效果:
在这里插入图片描述

private void refreshBanner(List<BannerInfo> bannerInfos){
       
        banner.setAdapter(new BGABanner.Adapter<ImageView, BannerInfo>() {
            @Override
            public void fillBannerItem(BGABanner banner, ImageView itemView, @Nullable BannerInfo model, int position) {
                Glide.with(BannerTestActivity.this).load(model.getImagePath())
                        .into(itemView);

            }
        });
        banner.setData(bannerInfos, null);
        banner.setClipChildren(false);//用来定义他的子控件是否要在他应有的边界内进行绘制。 默认情况下,clipChild被设置为true。 也就是不允许进行扩展绘制。
        //viewPager的设置一定要在setData之后,因为BGABanner是在setData之后添加的viewPager,否则获取到的只会是null
        BGAViewPager viewPager = banner.getViewPager();
        //viewPager.setClipChildren(false);
        viewPager.setPageMargin(ScreenUtil.dp2px(this,15));
        viewPager.setOffscreenPageLimit(3);
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewPager.getLayoutParams();
        layoutParams.leftMargin = ScreenUtil.dp2px(this,40);
        layoutParams.rightMargin = ScreenUtil.dp2px(this,40);
        viewPager.setLayoutParams(layoutParams);
        viewPager.setPageTransformer(true,new ScaleInTransformer());
    }

ScaleInTransformer是viewPager的切换动画,view切换到两边时变小,在中间是最大
ScaleInTransformer.class


import android.view.View;

import android.support.v4.view.ViewPager;

public class ScaleInTransformer implements ViewPager.PageTransformer {
    private static final float DEFAULT_MIN_SCALE = 0.85f;
    private float mMinScale = DEFAULT_MIN_SCALE;//view缩小值
    public static final float DEFAULT_CENTER = 0.5f;
    private int pageWidth;
    private int pageHeight;
    @Override
    public void transformPage(View view, float position) {
        pageWidth = view.getWidth();
        pageHeight = view.getHeight();

        view.setPivotY(pageHeight / 2);
        view.setPivotX(pageWidth / 2);
        if (position < -1.0f) {
            // [-Infinity,-1)
            // view移动到最左边,在屏幕之外
            handleInvisiblePage(view, position);
        } else if (position <= 0.0f) {
            // [-1,0]
            // view移动到左边
            handleLeftPage(view, position);
        } else if (position <= 1.0f) {
            // view移动到右边
            handleRightPage(view, position);
        } else {
            // (1,+Infinity]
            //  view移动到右边,在屏幕之外
            view.setPivotX(0);
            view.setScaleX(mMinScale);
            view.setScaleY(mMinScale);
        }
    }

    public void handleInvisiblePage(View view, float position) {

        view.setScaleX(mMinScale);
        view.setScaleY(mMinScale);
        view.setPivotX(pageWidth);
    }
   
    public void handleLeftPage(View view, float position) {

        float scaleFactor = (1 + position) * (1 - mMinScale) + mMinScale;
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);

        view.setPivotX(pageWidth * (DEFAULT_CENTER + (DEFAULT_CENTER * -position)));
    }

    public void handleRightPage(View view, float position) {

        float scaleFactor = (1 - position) * (1 - mMinScale) + mMinScale;
        view.setScaleX(scaleFactor);
        view.setScaleY(scaleFactor);
        view.setPivotX(pageWidth * ((1 - position) * DEFAULT_CENTER));

    }
}

Demo 地址:Demo

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Android中,可以使用第三方库来实现轮图效果,其中一个常用的库是Banner。在使用Banner库时,可以通过设置一些属性来自定义轮图的效果。例如,可以设置轮间隔时间、轮图的圆角等属性。\[1\] 此外,还可以设置轮图的样式,内置样式有多种可供选择,可以根据需求进行设置。可以设置图片的加载方式,设置图片的网址或地址集合,设置轮图的标题集合等。还可以设置是否自动轮、显示器的位置等。\[2\] 如果想要实现一个简单的轮图效果,可以使用Banner框架提供的BannerImageAdapter适配器。可以通过设置适配器来加载轮图的数据,并在适配器中设置图片的显示方式。\[3\] 总结起来,使用Banner库可以方便地实现Android中的轮图效果,通过设置属性和适配器来自定义轮图的样式和数据。 #### 引用[.reference_title] - *1* *3* [Android---Banner轮图](https://blog.csdn.net/qq_44950283/article/details/128390186)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Android入门Banner轮图的使用(详解)](https://blog.csdn.net/m0_53223811/article/details/122562021)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值