代码:
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by hwk on 2020/5/18.
*/
public class MyView extends View {
private Paint paintPoint;//圆心
private Paint paintWave;//波浪
private float x, y;//画圆中心点坐标
private int radiusPoint;//圆心直径
private int radiusWave;//波浪直径
private int alphaWave;//波浪透明度常量
public MyView(Context context) {
super(context);
initPaint();
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
initPaint();
}
private void initPaint() {
paintPoint = new Paint();
paintPoint.setStyle(Paint.Style.FILL);
paintPoint.setColor(Color.parseColor("#FF0000"));
paintPoint.setAntiAlias(true);
paintPoint.setStrokeWidth(radiusPoint / 2);
paintWave = new Paint();
paintWave.setStyle(Paint.Style.FILL);
paintWave.setColor(Color.parseColor("#BBCFFC"));
paintWave.setAntiAlias(true);
paintWave.setStrokeWidth(radiusWave / 2);
paintWave.setAlpha(alphaWave);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
radiusPoint = 30;
radiusWave = 30;
alphaWave = 255;
//获取点击的坐标位置
x = event.getX();
y = event.getY();
flushPaint();
break;
}
return super.onTouchEvent(event);
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
flushPaint();
}
};
private void flushPaint() {
radiusPoint = radiusPoint - 2;
radiusWave = radiusWave + 3;
alphaWave = alphaWave - 20;
if (alphaWave <= 25) {
alphaWave = 0;
radiusPoint = 30;
paintWave.setStrokeWidth(radiusWave / 2);
paintWave.setAlpha(alphaWave);
paintPoint.setStrokeWidth(radiusPoint / 2);
paintPoint.setAlpha(0);
invalidate();
} else {
paintWave.setStrokeWidth(radiusWave / 2);
paintWave.setAlpha(alphaWave);
paintPoint.setStrokeWidth(radiusPoint / 2);
paintPoint.setAlpha(255);
invalidate();
handler.sendEmptyMessageDelayed(0, 35);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(x, y, radiusWave, paintWave);
canvas.drawCircle(x, y, radiusPoint, paintPoint);
}
}