RippleView3效果图
结合打印日志观看 用户点击中心圆输出0 点击分裂对象输出分裂对象对应序号
说明
在之前的RippleView2的基础上 增加了分裂效果 我称之为RippleView3
RippleView系列- ->RippleView、 RippleView2、RippleView3
RippleView3升级功能:
- 中心圆点击监听 被点击之后会自动分裂 同时标识:clickResult=0
- 分裂对象点击监听 被点击之后会复原到涟漪扩散状态 同时标识:clickResult=分裂对象序号
- 提供clickResult的查询方法 用户为RippleView3添加点击事件后可以查询到clickResult进行相应处理(如效果图所示)
RippleView2升级功能:
- 分裂两个 水平对称分布
- 分裂三个 三角形分布
- 分裂四个 对称分布
- 复原 回到涟漪荡漾状态
RippleView基础功能:
- 中心圆控制 开启 / 关闭 / 修改颜色
- 涟漪控制 开启 / 关闭 / 修改颜色
- 初始半径控制 涟漪初始大小与中心圆大小一致
- 涟漪扩散速度控制 实际上就是一个涟漪从出现到消亡的时间 越小扩散越快
- 涟漪扩散间距控制 就是指涟漪两两之间的间距
- 绘制次数控制 就是一个涟漪从出现到消亡被绘制的次数 相当于动画总帧数
代码
/**
* create by 星航指挥官
* create on 2020/12/13
* 不过是大梦一场空
* 课不过是孤影照惊鸿
*/
//在RippleView的基础上 增加了分裂动作
public class RippleView3 extends View {
//中心点坐标
private float x = 0;
private float y = 0;
//是否需要中心圆 默认需要
private boolean centry = true;
//是否开启涟漪
private boolean startRipple = true;
//中心圆颜色
private int centryColor = 0;
//涟漪颜色
private int rippleColor = 0;
//中心圆半径,同时也是涟漪扩散初始半径的默认值
private float minR = 25;
//涟漪扩散最大半径默认值
private float maxR = 100;
//涟漪扩散一圈的时间默认值
private float speed = 2;
//涟漪扩散间距默认值
private float spacing = 75;
//是否在分裂状态
private boolean onSplit = false;
//分裂个数
private int splitCount = 3;
//绘制次数
private float drawCount = 400;
//涟漪集合
private ArrayList<Ripple> ripples;
//分裂对象集合
private ArrayList<Split> splits;
//点击结果
private int clickResult = -1;
/*
* 构造器
* */
public RippleView3(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
//初始化数组
ripples = new ArrayList<>();
splits = new ArrayList<>();
//获取用户自定义属性
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.RippleView3);
//获取用户是否需要中心圆
centry = ta.getBoolean(R.styleable.RippleView3_centry, centry);
//是否开启涟漪
startRipple = ta.getBoolean(R.styleable.RippleView3_startRipple, startRipple);
//获取用户定义的涟漪最小半径
minR = ta.getDimension(R.styleable.RippleView3_minR, minR);
//获取用户定义的涟漪扩散一圈时间
speed = ta.getFloat(R.styleable.RippleView3_speed, speed);
//获取用户定义的绘制次数
drawCount = ta.getFloat(R.styleable.RippleView3_drawCount, drawCount);
//获取用户定义的涟漪扩散间隔
spacing = ta.getDimension(R.styleable.RippleView3_spacing,