源码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
/**
* 声音图标
*/
public class VideoVoice extends View {
private int width, height;
private Paint paint;
private int solidColor = Color.CYAN;
private int cornerWidth = 30;
private int cornerHeight = 30;
private int strokeWidth = 5;
private int angle = 50;
private int count = 3;
private int leftCenterX;
public VideoVoice(Context context) {
this(context, null, 0);
}
public VideoVoice(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public VideoVoice(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public VideoVoice(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initAttributeSet(context, attrs, defStyleAttr, defStyleRes);
}
private void initAttributeSet(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
width = getMeasuredWidth();
height = getMeasuredHeight();
leftCenterX = width / 2;
cornerWidth = leftCenterX / 2;
cornerHeight = height / 5;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
drawLeft(canvas);
drawRight(canvas);
}
/**
* 绘制左边
*
* @param canvas
*/
private void drawLeft(Canvas canvas) {
paint.setStyle(Paint.Style.FILL);
paint.setColor(solidColor);
Path path = new Path();
path.moveTo(leftCenterX, 0);
path.lineTo(leftCenterX, height);
path.lineTo(leftCenterX - cornerWidth, height - cornerHeight);
path.lineTo(0, height - cornerHeight);
path.lineTo(0, cornerHeight);
path.lineTo(leftCenterX - cornerWidth, cornerHeight);
path.close();
canvas.drawPath(path, paint);
}
/**
* 绘制右边
*
* @param canvas
*/
private void drawRight(Canvas canvas) {
paint.setStrokeWidth(strokeWidth);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(solidColor);
int centerX = leftCenterX;
int centerY = height / 2;
int rightAngle = angle / count;
int rectRadius = (width - leftCenterX - strokeWidth);
for (int i = 0; i < count; i++) {
int radius = (int) (rectRadius * (i + 1) / count);
RectF rectF = new RectF(centerX - radius, centerY - radius, centerX + radius, centerY + radius);
canvas.drawArc(rectF, 0 - rightAngle * (i + 1), rightAngle * (i + 1) * 2, false, paint);
}
}
}