热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidCardView+ViewPager实现ViewPager翻页动画的方法

本篇文章主要介绍了AndroidCardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Viewpager通俗一点讲就是一个允许左右翻转带数据的页面的布局管理器,经常用来连接Fragment,它很方便管理每个页面的生命周期,使用ViewPager管理Fragment是标准的适配器实现。最常用的实现一般有FragmentPagerAdapter和FragmentStatePagerAdapter。自行百度它的用法。今天我们要实现的是下面的效果:

NO PICTURE TALK A JB

要实现图中的效果需要以下几个知识点:
1.clipChildren属性
2.一个页面显示多个ViewPager的Item
3.自定义PagerTransformer
4.ViewPager结合CardView

1.clipChildren 属性

clipchildren :是否限制子View在其范围内,当我们将其值设置为false后那么在子控件的高度高于父控件时也会完全显示,而不会被压缩,(上面中间的按钮超过上面的阴影线,依旧可以正常显示),默认的时候是true。

了解了这个属性就可以让一个页面显示多个Viewpager的Item

2.一个页面显示多个ViewPager的Item

直接在xml布局文件中配置:android:clipToPadding="false"

<&#63;xml version="1.0" encoding="utf-8"&#63;>

  
  
  
    
  
  
  
  
    
    
    
      
    
  

3.自定义ViewPager翻页动画

直接上代码

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);
  }
}

使用方法

// 1. viewPager添加parallax效果,使用PageTransformer就足够了
   viewPager.setPageTransformer(false, new CustPagerTransformer(this));

4.CardView 与Viewpager联合使用

先看viewpager的一个item布局

<&#63;xml version="1.0" encoding="utf-8"&#63;>

使用ViewPager管理Fragment是标准的适配器实现,所以将这个xml作为fragment的布局就行了,就是这么简单。

红红火火恍恍惚惚,貌似完成了,就是这么简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
爱笑的美美6_833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有