版权声明:本文为博主原创文章,未经博主允许不得转载。 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));
}
}