让你ViewPager的滑动顺滑起来!

  我们在使用ViewPager时,就是写个Adapter,拿到数据,填充进去,OVER!

  滑动时很平稳,与我们在用其它APP时看到的舒服的,流畅的滑动不同,它们都加了特效!

  话不多说,直接上谷歌给的类 ZoomOutPageTransformer 

 还有官方文档 谷歌文档在此  

  使用很简单 拿到ViewPager 在配置适配器之后“上特效即可”


initData();
        vp_guid.setAdapter(new GuidAdapter());
        vp_guid.setPageTransformer(true,new ZoomOutPageTransformer());   





接下来看一下此类

public class ZoomOutPageTransformer implements ViewPager.PageTransformer{
    private static final float MIN_SCALE = 0.85f;
    private static final float MIN_ALPHA = 0.5f;
    @Override
    public void transformPage(View page, float position) {
           int pageWidth = page.getWidth();
           int pageHeight = page.getHeight(); //(1)引导页左上角的点是 0 右上角是 1 所以才有如下算法
           if (position<-1){
               page.setAlpha(0);
           }else if (position<=1){   //(2)
               float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
               float vertMargin = pageHeight * (1-scaleFactor)/2;
               float horzMargin = pageWidth * (1-scaleFactor)/2;
               if (position<0){
                   page.setTranslationX(horzMargin - vertMargin / 2);
               }else {
                   page.setTranslationX(-horzMargin+vertMargin/2);
               }
               page.setScaleX(scaleFactor);
               page.setScaleY(scaleFactor);

               page.setAlpha(MIN_ALPHA+(scaleFactor - MIN_SCALE)/(1-MIN_SCALE)*(1-MIN_ALPHA));
           }else {
               page.setAlpha(0);
           }
    }
}
  总结分析一下:算法较为简单,(1)处拿到滑动的位置

                              (2)是具体计算渐变动画的逻辑

   至于为什么

vertMargin / 2
   是X轴的缩放,水平边距要减去page垂直边距的一半。看起来更合适??

之后就是向下渐变的逻辑了.

   还有另外一点 

   如果你的ViewPager不可以回滚了,子View有容器了 不妨修改适配器如下

    

@Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ImageView view = array_images.get(position);
            container.removeView(view);
        }
  

 最后,这些总结希望对你有用!













  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值