Android 视频音量图标

在这里插入图片描述
源码

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);
        }
    }

}

相关推荐

  1. Android 10 Android音量调节

    2024-07-19 13:40:01       43 阅读
  2. Android 单一音量控制

    2024-07-19 13:40:01       33 阅读
  3. Android中使用MediaPlayer播放音频视频

    2024-07-19 13:40:01       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 13:40:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 13:40:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 13:40:01       57 阅读
  4. Python语言-面向对象

    2024-07-19 13:40:01       68 阅读

热门阅读

  1. 音视频中文件的复用和解复用

    2024-07-19 13:40:01       23 阅读
  2. PHP 调用 JD 详情 API 接口:提升电商体验的关键

    2024-07-19 13:40:01       20 阅读
  3. 域名解析出错的解决办法

    2024-07-19 13:40:01       19 阅读
  4. 裸金属服务器

    2024-07-19 13:40:01       22 阅读
  5. [Makefile] 第四章:大型项目中的makefile

    2024-07-19 13:40:01       17 阅读
  6. 前端传值到后端,后端解析为科学计数法

    2024-07-19 13:40:01       16 阅读
  7. 2024 年 6 大 SwaggerHub 替代方案

    2024-07-19 13:40:01       16 阅读
  8. PHP 与 1688 详情 API 接口的完美对接

    2024-07-19 13:40:01       17 阅读
  9. 在状态流图中重用自定义C代码

    2024-07-19 13:40:01       17 阅读
  10. element导出.csv

    2024-07-19 13:40:01       21 阅读