网上的无限循环的viewpager例子很多但是运行时多多少少都会有不少问题,下面推荐的三个都是博主运行过基本拿来就可以使用的三方库,质量有保证,记录下防止以后再重复花时间去找。文末有第三个库的viewpager滑动效果的写法,非常简单,效果也非常棒,只需要重写viewpager的 transformPage 就可以实现图中示例的效果。
一.CircleViewPager的效果如图所示:项目地址:
https://github.com/zhpanvip/CircleViewPager
博客地址:
https://blog.csdn.net/qq_20521573/article/details/52037929
二.MZBannerView的效果如图所示:项目地址:
https://github.com/pinguo-zhouwei/MZBannerView
博客地址:
https://www.jianshu.com/p/653680cfe877
三.ViewpagerTransition的效果 如图所示:项目地址:
https://github.com/xmuSistone/ViewpagerTransition
只需要重写viewpager的 transformPage 就可以实现图中示例的效果,非常简单实用。
/**
* 实现ViewPager左右滑动时的时差
* Created by xmuSistone on 2016/9/18.
*/
public class CustPagerTransformer implements ViewPager.PageTransformer {
private int maxTranslateOffsetX;
private ViewPager viewPager;
public CustPagerTransformer(Context context) {
this.maxTranslateOffsetX = dp2px(context, 180);
}
public void transformPage(View view, float position) {
if (viewPager == null) {
viewPager = (ViewPager) view.getParent();
}
int leftInScreen = view.getLeft() - viewPager.getScrollX();
int centerXInViewPager = leftInScreen + view.getMeasuredWidth() / 2;
int offsetX = centerXInViewPager - viewPager.getMeasuredWidth() / 2;
float offsetRate = (float) offsetX * 0.38f / viewPager.getMeasuredWidth();
float scaleFactor = 1 - Math.abs(offsetRate);
if (scaleFactor > 0) {
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
view.setTranslationX(-maxTranslateOffsetX * offsetRate);
}
}
/**
* dp和像素转换
*/
private int dp2px(Context context, float dipValue) {
float m = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * m + 0.5f);
}
}
android:clipToPadding="false" android:paddingEnd="48dp" android:paddingLeft="48dp" android:paddingRight="48dp" android:paddingStart="48dp"
必须要添加,否则无法实现效果