Android自定义水波纹
view_WaterView
package com.bawei.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;
public class WaterView extends View {
private Paint mpaint;
private Path mpath;
private float xM;
public WaterView(Context context) {
super(context);
init(context);
}
public WaterView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
// 初始化 画笔 路径
private void init(Context context) {
mpath = new Path(); // @路径
mpaint = new Paint(); // @画笔
mpaint.setColor(Color.RED); // 设置颜色
mpaint.setStrokeWidth(2); // 设置宽度
mpaint.setAntiAlias(true);// 设置抗锯齿
mpaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mpath.reset(); // 刷新
// 记录开始位置 getLeft() 从左开始
mpath.moveTo(getLeft(),getBottom());
// 记录一下波动的位置
float mPi = (float) (Math.PI*5/getRight()); // 获取每一个宽度值占得度数
xM-=0.5f;
for(int x=0;x<=getRight();x+=20){
mpath.lineTo(x, (float) (6*Math.cos(mPi*x+xM))+10);
}
// 记录结束位置
mpath.lineTo(getRight(),getBottom());
canvas.drawPath(mpath,mpaint);
postInvalidateDelayed(20); // 定时刷新每隔20毫秒执行一下
}
}
在布局文件中使用
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SbwActivity"
android:orientation="vertical">
<com.bawei.view.WaterView
android:layout_marginTop="100dp"
android:layout_width="match_parent"
android:layout_height="200dp" />
</LinearLayout>