效果图如上,其是根据优快云里面的大小,源码必编了一下,把一些不太重要的代码,删除了。代码如下:
/***************
*
*
* 波浪实现
*
* @author util_c
*
*/
public class MyWaterWave {
private long offset = 0L;//速率
private final float f = 0.033F;
private int mAlpha = 31; // 透明度
private int mColor = Color.GREEN; // 水颜色
private float mAmplitude = 10.0F; // 振幅
private final Paint mPaint = new Paint();
private float mWaterLevel = 0.5F; // 水高
private int speed=0;//速度
/***************
*
* 显示视图的宽、高
*
* @param width
* @param height
*/
public MyWaterWave() {
mPaint.setStrokeWidth(1.0F);
mPaint.setColor(mColor);
mPaint.setAlpha(mAlpha);
//变换速度
offset = (long) (Math.random()*10);
offset = offset<=0?1:offset;//不小于等于0
}
/******************
* 绘制方法
*
* @param canvas
*/
public void drawWaterWave(Canvas canvas,int width,int height) {
canvas.save();
// 占视图总大小的多么份
float mHeigth = height * (1.0F - mWaterLevel);
//加上浪的高度<振幅>
int top = (int) (mHeigth + mAmplitude);// 水的位置
//水的高度<矩形>
canvas.drawRect(0.0F, top, width, height, mPaint);
//区间
if (offset>8388607L) {
offset=0;
}
//随机的偏移量<速度>
speed+=offset;
//用绘制直线的方式,把每一个弧给绘制到视图的等宽
for (int i = 0; i < width; i++) {
// (i + c * mWidth) / mWidth放大器
double x = Math.sin(Math.PI * (2.0F * (i + speed * width * f)) / width);
int startY = (int) (height / 2 - mAmplitude * x);
canvas.drawPoint(i, startY, mPaint);
// 绘制填充区域<从曲线上的每一个,向下绘制直线>
canvas.drawLine(i, startY, i, top, mPaint);
}
canvas.restore();
}
/******************
* 设置振幅 默认认是10
*
* @param amplitued
*/
public void setAmplitude(float amplitued) {
mAmplitude = amplitued;
}
/***********
* 设置透明度0~1之间的小数 0 为透明,1为完全不透明
*
* @param alpha
*/
public void setWaterAlpha(float alpha) {
this.mAlpha = ((int) (255.0F * alpha));
mPaint.setAlpha(this.mAlpha);
}
/**********************
*
* 设置水的高度0-1之间 值越小,波浪的高度就越小,越大,波浪的高度越高
*
* @param paramFloat
*/
public void setWaterLevel(float paramFloat) {
mWaterLevel = paramFloat;
}
/****************
* 设置水的颜色 值范围在0~1之间
*
* @param color
*/
public void setWaterColor(float color) {
this.mColor = (int) (255.0f * color);
mPaint.setColor(mColor);
}
/****************
*
* 设置移动的速度
* <默认速度是0~10之间随机的数>
* @param speed
*/
public void setOffset(int speed){
this.offset = speed;
}
}
这是大神的写的源码,我是在他写的基础上改良的,谢谢
http://blog.youkuaiyun.com/litton_van/article/details/21888271