声明:
根据原文
http://blog.csdn.net/u014608640/article/details/52487653
基础上修改, 模拟碰撞, 可随机颜色, 气泡模糊等
成员变量定义
private static final int MSG_CREATE_BUBBLE = 0;
public static final int MAX_LEVEL = 100;
public static final int MIN_LEVEL = 0;
protected float mWidth;
protected float mHeight;
//底部填充色
protected int mColor = 0xFF61d66b;
//气泡上升高度(水面高度)
protected float mTop;
//底部 == mHeight
protected float mBottom;
protected Paint mPaint;
// 0 - 100 mTop根据此值计算
protected int mLevel = 100;
//存放气泡集合
private List<Bubble> mBubbles = new CopyOnWriteArrayList<>();
private Random mRandom = new Random();
private boolean mStarting = false;
private Paint mBubblePaint;
//气泡随机颜色值
private String[] mBubbleColors = {
"#ffec5c",
"#00ccff",
"#ffffff"
};
获取控件宽高
mWidth = MeasureSpec.getSize(widthMeasureSpec);
mHeight = MeasureSpec.getSize(heightMeasureSpec);
onDraw 所有气泡都在这里面绘制
@Override
protected final void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
//计算top
mTop = mHeight - (int) (mHeight * (mLevel *1f / MAX_LEVEL));
mBottom = mHeight;
//颜色填充
//top
RectF topRectF = new RectF(0, 0, mWidth, mTop);
mPaint.setAlpha(50);
canvas.drawRect(topRectF, mPaint);
//bottom
RectF bottomRectF = new RectF(0, mTop, mWidth, mBottom);
mPaint.setAlpha(255);
canvas.drawRect(bottomRectF, mPaint);
//画气泡
drawBubble(canvas);
invalidate();
}
接下来就要气泡的产生过程及绘制
气泡实体类
private class Bubble {
/** 气泡半径 */
private