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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值