public class WaterView extends View {
private Path path;
private Paint paint;
private float mX;
public WaterView(Context context) {
this(context,null);
}
public WaterView(Context context, AttributeSet attrs) {
this(context, attrs,-1);
}
public WaterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
path = new Path();
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(5);
paint.setColor(Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
path.reset();
path.moveTo(getLeft(),getBottom());
float mPi = (float) (Math.PI * 2 / getRight());
mX -= 0.1f;
for (int x=0;x<=getRight();x+=20){
path.lineTo(x, (float) (10*Math.sin(mPi*x+mX)+50));
}
path.lineTo(getRight(),getBottom());
canvas.drawPath(path,paint);
postInvalidateDelayed(20);
}
}
另一种方式的写法(实际上是一样的,只是打了注释)
public class WaterView extends View {
private Path path;
private Paint paint;
private float xM;
public WaterView(Context context) {
super(context);
init(context);
}
public WaterView(Context context,AttributeSet attrs) {
super(context, attrs);
init(context);
}
public WaterView(Context context,AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
path = new Path();//路径
paint = new Paint();//画笔
paint.setColor(Color.RED);//设置颜色
paint.setStrokeWidth(2);//设置宽度
paint.setAntiAlias(true);//抗锯齿
paint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
path.reset();// 刷新
//记录开始位置
path.moveTo(getLeft(), getBottom());
//记录波动的位置
float mPi = (float) (Math.PI * 5 / getRight());// 获取每一个宽度值占得度数
xM -= 0.5f;
for (int x=0;x <= getRight(); x += 20){
path.lineTo(x,(float) (6 * Math.cos(mPi * x + xM)) + 10);
}
//记录结束位置
path.lineTo(getRight(),getBottom());
canvas.drawPath(path,paint);
postInvalidateDelayed(20);//定时刷新 单位:毫秒
}
}