放大進入縮小退出無限循環的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輪播圖比較靠譜,雖然內存稍微多一些。內存

相關文章
相關標籤/搜索