无限循环
在PagerAdapter.getCount();方法里返回Integer.MAX_VALUE。设置图片用ImageView.setBackgroundDrawable(pics[position % pics.length];来实现伪无限循环。
在第一页的前边和最后一页的后边添加两个缓冲页P0和Pm, Pm显示第一页的内容,P0显示最后一页的内容,当滑动到P0时,强制转到最后一页,当滑动到Pm时强制转到第1页。这种方式会有闪屏的问题。
放大缩小
在OnPageChangeListener.onPageScrolled()方法中控制滚动页的缩放。这种方式新进入的页面会忽大忽小。
利用官方提供的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轮播图比较靠谱,虽然内存稍微多一些。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。