介绍
使用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; 私人SparseArray showViewArray; 私人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如何实现层叠卡片式的横幅轮播图