您当前的位置: 首页 > 
  • 1浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

无限循环的viewpager效果的3个三方组件

沙漠一只雕得儿得儿 发布时间:2018-11-22 20:33:28 ,浏览量:1

  网上的无限循环的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"

必须要添加,否则无法实现效果

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0349s