放大进入缩小退出无限循环的Banner

无限循环

  1. 在PagerAdapter.getCount();方法里返回Integer.MAX_VALUE。设置图片用ImageView.setBackgroundDrawable(pics[position % pics.length];来实现伪无限循环。动画

  2. 在第一页的前边和最后一页的后边添加两个缓冲页P0和Pm, Pm显示第一页的内容,P0显示最后一页的内容,当滑动到P0时,强制转到最后一页,当滑动到Pm时强制转到第1页。这种方式会有闪屏的问题。code

放大缩小

  1. 在OnPageChangeListener.onPageScrolled()方法中控制滚动页的缩放。这种方式新进入的页面会忽大忽小。orm

  2. 利用官方提供的PageTransFormer实现。图片

mViewPager.setPageTransFormer(false, new ScalePageTransFormer);

public class ScalePageTransFormer implements ViewPager.PageTransformer {
    private static final float MIN_SCALE = 0.85f;
    private static final float MIN_ALPHA = 0.5f;
    @SuppressLint("NewApi")
    public void transformPage(View view, float position) {
        if (position < -1) {//看不到的一页,第一页前边 *
            view.setScaleX(MIN_SCALE);
            view.setScaleY(MIN_SCALE);
        } else if (position <= 1) {
            if (position < 0) {//滑出的页 0.0 ~ -1 *
                float scaleFactor = (1 - MIN_SCALE) * (0 - position);
                view.setScaleX(1 - scaleFactor);
                view.setScaleY(1 - scaleFactor);
            } else {//滑进的页 1 ~ 0.0 *
                float scaleFactor = (1 - MIN_SCALE) * (1 - position);
                view.setScaleX(MIN_SCALE + scaleFactor);
                view.setScaleY(MIN_SCALE + scaleFactor);
            }
        } else {//看不到的另外一页,最后一页后边 *
            view.setScaleX(MIN_SCALE);
            view.setScaleY(MIN_SCALE);
        }
    }
}

结论

经过设置PagerAdapter.getCount()返回Integer.MAX_VALUE和PageTransFormer来实现无线循环带动画的Banner轮播图比较靠谱,虽然内存稍微多一些。内存

相关文章
相关标签/搜索