流程
-
- 创建一个Bean对象代表一个表情
主要包含表情当前位置信息, 表情开始下落时间信息, Bitmap对象
-
- 初始化数据源
创建一个Bean对象的List集合, 设置一个表情雨的执行最大时长
设置一个开始时间0, 当开始时间小于最大时长时创建一个代表表情的Bean对象, 设置他的位置, Bitmap对象, 并加入到集合中
对开始时间随机加上一定的数值作为下一个表情开始下落的时间 - 重写onDraw方法进行绘制
遍历Bean集合, 绘制每一个对象, 如果对象超出了屏幕大小则忽略
如果超出屏幕的是最后一个表情则停止表情雨 (设置View不可见)
设置表情雨的下一次出现位置
调用 触发对View下次的重新绘制
问题
- view启动的时候设置为GONE状态获取不到View的宽高
设置为
GONE的情况下不会计算宽高也不会渲染
设置为INVISIBLE会计算宽高但是不会渲染 postInvalidate - onDraw最后postInvalidate导致表情雨结束后onDraw一直会被调用
当Bean集合的最后一个元素超出屏幕的时候直接设置View不可见并return, 这样就不会触发postInvalidate