在PagerAdapter.getCount();方法裏返回Integer.MAX_VALUE。設置圖片用ImageView.setBackgroundDrawable(pics[position % pics.length];來實現僞無限循環。動畫
在第一頁的前邊和最後一頁的後邊添加兩個緩衝頁P0和Pm, Pm顯示第一頁的內容,P0顯示最後一頁的內容,當滑動到P0時,強制轉到最後一頁,當滑動到Pm時強制轉到第1頁。這種方式會有閃屏的問題。code
在OnPageChangeListener.onPageScrolled()方法中控制滾動頁的縮放。這種方式新進入的頁面會忽大忽小。orm
利用官方提供的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輪播圖比較靠譜,雖然內存稍微多一些。內存