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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yiy91/article/details/86548924

使用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);
        //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 cn.bingoogolapple.bgabanner.transformer.BGAPageTransformer;

public class ScaleInTransformer extends BGAPageTransformer {
    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);
        }
    }

    @Override
    public void handleInvisiblePage(View view, float position) {

        view.setScaleX(mMinScale);
        view.setScaleY(mMinScale);
        view.setPivotX(pageWidth);
    }

    @Override
    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)));
    }

    @Override
    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));

    }
}

猜你喜欢

转载自blog.csdn.net/yiy91/article/details/86548924