《Android 群英传》读书笔记:自定义 View -- 音频条形图

android 音频动画,GitHub - a237112263/VoiceWaveView: a voice wave view library 一个动态音频条形图的view,android录音动画... VoiceWaveViewa voice wave view library一个音频条形图的view,支持柱状音频,折线音频,音乐跳动,音频跳动的样式ScreenshotDependenciesallprojects {repositories {...maven { url 'https://jitpack.io' }}}implementation 'com.github.xfans:Voic... 阅读详情

转载请注明出处: http://blog.youkuaiyun.com/like_program/article/details/53352899

最终效果图

我们先看下最终效果图:

最终效果图

分析

通过上面的效果图,我们可以分析出:音频条形图,是由一个个矩形组成的,每个矩形的宽度相同,高度不同。每个矩形之间的距离相同。知道了这些,也就好办了。

绘制音频条形图

打开 Android Studio,新建 VolumeViewTest 项目。

新建 VolumeView.java ,继承自 View,代码如下:

package com.example.volumeviewtest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * 自定义 View 音频条形图
 */
public class VolumeView extends View {
   
   

    /**
     * 屏幕宽度
     */
    private int mScreenWidth;

    /**
     * 屏幕的高度
     */
    private int mScreenHeight;

    /**
     * mRectWidth 实际上是相邻矩形左边缘的距离
     * 但是把它当作每个矩形的宽度,后面会好理解一些
     */
    private int mRectWidth;

    /**
     * 绘制矩形的画笔
     */
    private Paint mPaint;

    /**
     * 矩形的数量
     */
    private int mRectCount = 12;

    /**
     * 第一个矩形右边缘和第二个矩形左边缘之间的距离
     */
    private int offset = 5;

    /**
     * 随机数
     */
    private double mRandom;

    public VolumeView(Context context) {
        super(context);
    }

    public VolumeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public VolumeView(Context context, AttributeSet attrs,
                      int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 初始化画笔
     */
    private void initPaint() {
        // 创建绘制矩形的画笔
        mPaint = new Paint();
        // 蓝色
        mPaint.setColor(Color.BLUE);
    }

    /**
     * 系统计算出控件的大小后,就会回调此方法
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        // 获取屏幕宽度
        mScreenWidth = w;
        // 获取屏幕高度
        mScreenHeight = h;
        // 每个矩形的宽度
        mRectWidth = (int
自定义动态的音频条形图 1.思路:1.制作静态的条形图就是绘制一个个的矩形,每一个矩形之间进行一定量的偏移即可; 2.制作动态的需要对矩形进行一个重新绘制。 2.具体实现1.在ondraw()方法中进行矩形坐标的计算。制定一定的矩形的个数,通过循环创建小矩形。利用随机数,生成随机的矩形的高度即rectItemHeight ,通过横坐标的不断平移绘制出静态的小矩形。 @Override protected void 阅读详情

相关推荐

Android实现统计图——条形图和折线图

通过这样的方式,你可以绘制两条不同颜色的折线,并且不会填充它们围起来的空间。你可以根据需要调整数据点和其他属性,以适应你的具体需求。这样,当用户点击某个月份的柱条时,会在柱条上方显示所需的提示信息。对象,一个用于绘制文本,另一个用于绘制线条,分别设置了它们的颜色、文本大小、对齐方式、样式和线宽。当鼠标悬停在某个月份的折线上时,会在折线上方显示相应的提示信息。为了实现绘制两条不同颜色的折线,并且确保它们围起来的空间不被填充,在。这意味着只绘制线条的轮廓,而不是填充线条内部。绘制的所有线条都会是黑色的。

2201_75488282的博客 2565

Android---手把手教你撸一个自定义条形图

之前从某网上看了一个描述自定义条形图的视频教程,因为没有源码,所以自己记录了一下,方便以后用到,初学者也可以互相学习.废话不多说,首先看下效果图:(可能界面比较low哈....)我们先看一下 画图三要素的介绍Canvas : 画布, 绘制Bitmap操作;Paint : 绘制所需的画笔(一般用来规定颜色,样式等);Path : 路径 轨迹;那么接下来直接上代码,代码中都有注释,我就不过度赘述了;设...

JOY的博客 2609

MPAndroidChart 折线图 饼状图 条形图 最简单使用方式(kotlin)

在搜了很多文章并且自己进行实验后,我总结出了使用kotlin实现这三种图最简单的方式,希望能够帮助到跟我一样初次使用MPAndroidChart的人。

qq_63833495的博客 1622

Android代码-VolumeView

VolumeView Demo ![image] (https://github.com/JangGwa/VolumeView/blob/master/VolumeView.gif)

Android-自定义组件之条形音频条频谱

自定义的一个用于显示条形音频条的频谱,可以加入自己开发的音乐播放器。

Android实现音频条形图效果(仿音频动画无监听音频输入)

音频条形图 如下图所示就是这次的音频条形图: 由于只是自定义View的用法,我们就不去真实地监听音频输入了,随机模拟一些数字即可。 如果要实现一个如上图的静态音频条形图,相信大家应该可以很快找到思路,也就是绘制一个个的矩形,每个矩形之间稍微偏移一点距离即可。如下代码就展示了一种计算坐标的方法。 for (int i = 0; i < mRectCount; i++) { // 矩形的绘制是从左边开始到上、右、下边(左右边距离左边画布边界的距离,上下边距离上边画布边界的距离) canvas.drawRect( (float) (mRectWidth * i + offset), curren

【python3.7】解决报错 error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++

解决pip安装py7zr遇到的报错问题。

水w的博客 3936

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1673

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

TCN(Temporal Convolutional Networks)时序卷积网络详解及代码

zhulewen的博客 7883

关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer

关于LIO-SAM编译时出现错误: 下载LIO-SAM代码 进入LIO-SAM文件夹,通过以下代码编译: mkdir build cd build cmake .. make 报错: /usr/bin/ld: 找不到 -lBoost::timer collect2: error: ld returned 1 exit status CMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/li

wwtx的博客 3648

FPGA赋能:从加权灰度均值到快速收敛的自动曝光实战

本文深入探讨了FPGA在工业视觉自动曝光算法中的应用,重点介绍了加权灰度均值法的优化实现与快速收敛策略。通过硬件友好的算法改造和流水线架构设计,FPGA方案能在1帧内完成曝光调整,显著提升处理速度和能效比,适用于复杂光照条件下的工业检测场景。

weixin_29306317的博客 82

酒店前台pms管理系统

对于酒店经营者来说,选择一款优秀的管理系统,是提升运营效率、优化客人体验的关键。PMS酒店管理系统凭借其强大的房态管理、实时数据监控、OTA直联、无人值守等功能,已经成为许多酒店提升管理水平的得力助手。无论是大中型酒店,还是小型民宿,PMS系统都能根据不同需求提供量身定制的解决方案,帮助酒店实现精细化管理、提高运营效率。如果你也在为酒店管理中的繁琐琐事而困扰,不妨尝试一下PMS酒店管理系统,感受科技带来的便利与高效,让你的酒店运营更上一层楼!

2409_89897808的博客 2482

(全网最详细教程)康耐视读码器(以DM260S为例子)详细实用步骤

(全网最详细教程)康耐视读码器(以DM260S为例子)详细实用步骤

视觉人机器视觉的博客 7463

爬虫瑞数5.5案例:欧冶钢材交易官网,带后缀K5nOZLud(面向对象补环境)

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。由于之前某通信的瑞数已经调整,这里再出一篇文章,瑞数特点以及请求执行的流程已在之前的文章中分析过,这里不再特别讲解;

老衲爱洗头的博客 3042

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 《Android 群英传》读书笔记:自定义 View -- 比例图
下一篇: Android 仿微信底部菜单栏 + 显示未读消息数量
like_program
博客等级 码龄10年 88粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值