使用Android如何实现层叠卡片式的横幅轮播图

  介绍

使用Android如何实现层叠卡片式的广告轮播图?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

效果图如下:

使用Android如何实现层叠卡片式的广告轮播图

<强>背景

由于公司VIP模块项目需要,本着对ui设计师的尊重,需要实现以上效果图,在网上找了很多博客,都不能满足上面的需求,所以就只能自己硬着头皮自定义了,下面就是我自定义的观点代码,做个记录:

包cn.com.cunw.familydesk.view.vipBanner;
  
  进口android.animation.Animator;
  进口android.animation.AnimatorSet;
  进口android.animation.ObjectAnimator;
  进口android.animation.ValueAnimator;
  进口android.content.Context;
  进口android.content.res.TypedArray;
  进口android.graphics.Rect;
  进口androidx.annotation.NonNull;
  进口android.util.AttributeSet;
  进口android.util.Log;
  进口android.util.SparseArray;
  进口android.view.MotionEvent;
  进口android.view.VelocityTracker;
  进口android.view.View;
  进口android.view.animation.AccelerateDecelerateInterpolator;
  进口android.view.animation.AnimationUtils;
  进口android.widget.RelativeLayout;
  进口android.widget.Scroller;
  
  进口java.util.ArrayList;
  
  进口cn.com.cunw.familydesk.R;/* *
  * @Description:
  * @Author:五
  * @CreateDate: 2020/1/4 14
  *版权(C), 2015 - 2020,
  */公开课CoverFlowView RelativeLayout{延伸
  
  公共enum CoverFlowGravity {
  顶部,底部,CENTER_VERTICAL
  }
  
  公共enum CoverFlowLayoutMode {
  MATCH_PARENT, WRAP_CONTENT
  }
  
  保护CoverFlowGravity mGravity;
  
  保护CoverFlowLayoutMode mLayoutMode;
  
  私人照片卷轴mScroller;/* *
  *存储反射需要删除
  */私人ArrayListremoveViewArray;
  
  私人SparseArrayshowViewArray;
  
  私人int paddingLeft;
  私人int paddingRight;
  私人int paddingTop;
  私人int paddingBottom;
  
  私人int mWidth;//控件的宽度
  
  私人reflectHeightFraction浮动;
  私人int reflectGap;
  
  私人int mChildHeight;//孩子的高度
  私人int mChildTranslateY;//私人int mReflectionTranslateY;
  
  私人int mVisibleChildCount;//一屏显示的图片数量
  
  保护int VISIBLE_VIEWS=3;//可见视图左和右左右两边显示的个数
  
  私人ICoverFlowAdapter mAdapter;
  
  私人mOffset浮动;//私人int mLastOffset;
  
  私人最终int ALPHA_DATUM=200;//基础alpha& # 1461;
  私人int STANDARD_ALPHA;//基础缩放值//私有静态最终浮CARD_SCALE f=0.15;
  
  私有静态浮动MOVE_POS_MULTIPLE f=3.0;
  私有静态最终int TOUCH_MINIMUM_MOVE=5;
  私有静态最终浮MOVE_SPEED_MULTIPLE=1;
  私有静态最终浮MAX_SPEED f=6.0;
  私有静态最终浮摩擦=10.0度;
  
  私人VelocityTracker mVelocity;
  
  私人int firstIndex=0;
  
  公共CoverFlowView(上下文语境){
  超级(上下文);
  init ();
  }
  
  公共CoverFlowView(上下文语境,AttributeSet attrs) {
  超级(上下文,attrs);
  attrs initAttributes(上下文);
  init ();
  }
  
  公共CoverFlowView(上下文语境、AttributeSet attrs int defStyle) {
  超级(上下文、attrs defStyle);
  attrs initAttributes(上下文);
  init ();
  }
  
  私人空间initAttributes(上下文语境,AttributeSet attrs) {
  TypedArray=上下文。obtainStyledAttributes (attrs R.styleable.ImageCoverFlowView);
  int totalVisibleChildren=a.getInt (
  R.styleable。ImageCoverFlowView_visibleImage 3);
  如果(totalVisibleChildren % 2==0){//一屏幕必须是奇数显示
  把新的IllegalArgumentException(“可见的形象必须是奇数number");
  }
  
  VISIBLE_VIEWS=totalVisibleChildren祝辞祝辞1;//计算出左右两两边的显示个数
  
  reflectHeightFraction=a.getFraction (
  R.styleable。ImageCoverFlowView_reflectionHeight 100 0, 0.0 f);
  
  如果(reflectHeightFraction比;100){
  reflectHeightFraction=100;
  }
  reflectHeightFraction/=100;
  reflectGap=a.getDimensionPixelSize (
  R.styleable。ImageCoverFlowView_reflectionGap, 0);
  
  mGravity=CoverFlowGravity.values () [a.getInt (
  R.styleable.ImageCoverFlowView_coverflowGravity,
  CoverFlowGravity.CENTER_VERTICAL.ordinal ()));
  
  mLayoutMode=CoverFlowLayoutMode.values () [a.getInt (
  R.styleable.ImageCoverFlowView_coverflowLayoutMode,
  CoverFlowLayoutMode.WRAP_CONTENT.ordinal ()));
  
  a.recycle ();
  }
  
  私人空间init () {
  removeAllViews ();
  setWillNotDraw(假);
  setClickable(真正的);
  
  如果(mScroller==null) {
  mScroller=new照片卷轴(getContext()、新AccelerateDecelerateInterpolator ());
  }
  如果(showViewArray==null) {
  showViewArray=new SparseArray

使用Android如何实现层叠卡片式的横幅轮播图