一个实现气泡的自定义View

677 阅读1分钟

BubbleView

这是最后的效果图

  1. 主要的思想是通过postInvalidateDelayed()方法,来不断地重绘,更改集合中每一个Bubble对象的位置,从而达到一种动画的效果。

  2. 在onDraw()的最开始记录一个时间t1,然后再onDraw的最后记录一个时间t2, 延时的时间 = 我们期望的时间常量 - (t2 - t1)

    这个期望的时间常量最好不大于30ms,否则出现用户会出现卡顿的感觉

  3. onDraw()中主要操作的对象是自己定义的一个类Bubble,它的属性有

class Bubble(var x: Double, var y: Double, val r: Double, val angle: Int)

这里有个坑:

在进行集合删除操作的时候(由于Bubble的数量必须小于一个固定的常量allBubbleCount)

如果使用平时的迭代

for (x in list) {....}

就很容易出现被删除的点之后的一个点跳过迭代的现象

这时候就只能使用iterator进行手动迭代

  1. 注意需要在代码中手动开始和停止动画
BubbleView.start()
BubbleView.stop()

github地址:github.com/roger1245/R…

本文参考了:www.jianshu.com/p/d2996afeb…