没有合适的资源?快使用搜索试试~ 我知道了~
首页Android实现层叠卡片式banner
Android实现层叠卡片式banner
14 下载量 20 浏览量
更新于2023-03-03
评论
收藏 103KB PDF 举报
本文实例为大家分享了Android实现层叠卡片式banner的具体代码,供大家参考,具体内容如下 效果图如下: 背景 由于公司VIP模块项目需要,本着对ui设计师的尊重,需要实现以上效果图,在网上找了很多博客,都不能满足上面的需求,所以就只能自己硬着头皮自定义了,下面就是我自定义的view代码,做个记录: package cn.com.cunw.familydesk.view.vipBanner; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation
资源详情
资源评论
资源推荐
Android实现层叠卡片式实现层叠卡片式banner
本文实例为大家分享了Android实现层叠卡片式banner的具体代码,供大家参考,具体内容如下
效果图如下:
背景背景
由于公司VIP模块项目需要,本着对ui设计师的尊重,需要实现以上效果图,在网上找了很多博客,都不能满足上面的需求,
所以就只能自己硬着头皮自定义了,下面就是我自定义的view代码,做个记录:
package cn.com.cunw.familydesk.view.vipBanner;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Rect;
import androidx.annotation.NonNull;
import android.util.AttributeSet;
import android.util.Log;
import android.util.SparseArray;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.AnimationUtils;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import java.util.ArrayList;
import cn.com.cunw.familydesk.R;
/**
* @Description:
* @Author: wuJie
* @CreateDate: 2020/1/4 10:14
* Copyright (C), 2015-2020,
*/
public class CoverFlowView extends RelativeLayout {
public enum CoverFlowGravity {
TOP, BOTTOM, CENTER_VERTICAL
}
public enum CoverFlowLayoutMode {
MATCH_PARENT, WRAP_CONTENT
}
protected CoverFlowGravity mGravity;
protected CoverFlowLayoutMode mLayoutMode;
private Scroller mScroller;
/**
* To store reflections need to remove
*/
private ArrayList<View> removeViewArray;
private SparseArray<View> showViewArray;
private int paddingLeft;
private int paddingRight;
private int paddingTop;
private int paddingBottom;
private int mWidth; // 控件的宽度
private float reflectHeightFraction;
private int reflectGap;
private int mChildHeight; // child的高度
private int mChildTranslateY;
//private int mReflectionTranslateY;
private int mVisibleChildCount; // 一屏显示的图片数量
protected int VISIBLE_VIEWS = 3; // the visible views left and right 左右两边显示的个数
private ICoverFlowAdapter mAdapter;
private float mOffset;
//private int mLastOffset;
private final int ALPHA_DATUM = 200; // 基础alphaֵ
private int STANDARD_ALPHA;
// 基础缩放值
//private static final float CARD_SCALE = 0.15f;
private static float MOVE_POS_MULTIPLE = 3.0f;
private static final int TOUCH_MINIMUM_MOVE = 5;
private static final float MOVE_SPEED_MULTIPLE = 1;
private static final float MAX_SPEED = 6.0f;
private static final float FRICTION = 10.0f;
private VelocityTracker mVelocity;
private int firstIndex = 0;
public CoverFlowView(Context context) {
super(context);
init();
}
public CoverFlowView(Context context, AttributeSet attrs) {
super(context, attrs);
initAttributes(context, attrs);
init();
}
public CoverFlowView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initAttributes(context, attrs);
init();
}
private void initAttributes(Context context, AttributeSet attrs) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ImageCoverFlowView);
int totalVisibleChildren = a.getInt(
R.styleable.ImageCoverFlowView_visibleImage, 3);
if (totalVisibleChildren % 2 == 0) { // 一屏幕必须是奇数显示
throw new IllegalArgumentException("visible image must be an odd number");
}
VISIBLE_VIEWS = totalVisibleChildren >> 1; // 计算出左右两两边的显示个数
reflectHeightFraction = a.getFraction(
R.styleable.ImageCoverFlowView_reflectionHeight, 100, 0, 0.0f);
if (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();
}
private void init() {
removeAllViews();
setWillNotDraw(false);
setClickable(true);
if (mScroller == null) {
mScroller = new Scroller(getContext(), new AccelerateDecelerateInterpolator());
}
if (showViewArray == null) {
showViewArray = new SparseArray<View>();
} else {
showViewArray.clear();
}
if (removeViewArray == null) {
removeViewArray = new ArrayList<View>();
} else {
removeViewArray.clear();
}
firstIndex = 0;
mChildHeight = 0;
mOffset = 0;
//mLastOffset = -1;
isFirstIn = true;
lastMid = 1;
isChange = true;
// 计算透明度
STANDARD_ALPHA = (255 - ALPHA_DATUM) / VISIBLE_VIEWS;
if (mGravity == null) {
mGravity = CoverFlowGravity.CENTER_VERTICAL;
}
if (mLayoutMode == null) {
mLayoutMode = CoverFlowLayoutMode.WRAP_CONTENT;
}
// 一屏 显示的图片数量
int visibleCount = (VISIBLE_VIEWS << 1) + 1;
for (int i = 0; i < visibleCount && mAdapter != null && i < mAdapter.getCount(); ++i) {
View convertView = null;
if (removeViewArray.size() > 0) {
convertView = removeViewArray.remove(0);
}
View view = mAdapter.getView(i, convertView, this);
showViewArray.put(i, view);
剩余13页未读,继续阅读
weixin_38553648
- 粉丝: 5
- 资源: 921
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0