• Stars
    star
    302
  • Rank 138,030 (Top 3 %)
  • Language
    Java
  • Created about 7 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🍭自定义声音波纹,适合作录音应用的开发,模仿iPhone录音效果,模仿小米录音效果,其他录音效果录音效果

录音波纹控件

模仿iphone录音效果

模仿小米录音效果

小米录音界面实现详解

分析特点

  • 根据声音分贝可以自由控制高度

  • 曲线是动态,像是沿着一个方向在行走

  • 两个端点位置不变曲线两端由低到高

实现方式

  • 1 这里通过正弦函数 f(x) = sin(x)算法来实现,也可以用贝塞尔曲线,不过处理细节部分往往不太好

  • 2 f(x) = sin(x) x 是弧度 0 到2π 区间周期性变化,而我们的屏幕是宽度,0 到 480+ 以上的像素,怎么样转换成弧度呢? 我们知道 角度可以转化成弧度,而我的们的值恰好很接近角度周期性变化,因此,把每个像素看成一个角度,然后对应转化成弧度 0 到 360 对应 0 到 2π,Math有转化函数

    private float calculateY(float x) {

      /**
       * 弧度取值范围 0 2π
       */
      double rad = Math.toRadians(x);
    
      double fx = Math.sin(rad);
    
      float dy = (float) (fx * 50);
    
      return (float) (mCenterY - dy);
    

    }

  • 3 通过上面计算方法,增加点的数量可以得到一条平滑的曲线,点的数量可以按实际像素宽度计算,如果线的宽度大于1px,可以这样计算 点的数量 >= 屏幕宽度/线的宽度,这样效果最好

  • 4 通过上面方法我们只能得到一条静态的曲线,当然我们是希望他动起来,不能乱动,每个点要按sinX 成周期性变化 因此,可以通过时间控制 加入offset参数,offset 随着时间慢慢增加,让后将这个参数加入到sin函数里面

    private float calculateY(float x, float offset) {

      /**
       * 弧度取值范围 0 2π
       */
      double rad = Math.toRadians(x);
    
      double fx = Math.sin(rad + offset);
    
      float dy = (float) (fx * 50);
    
      return (float) (mCenterY - dy);
    

    }

  • 5 得到动态的曲线后,和我们预期还是不太一样,两端没有固定 通过判断两端点,会得到两个端点变化明显,并且我们的目的是两端收敛

  • 6 模仿小米还需要Path LineTo

  • 绘制3条相交的部分

More Repositories

1

DataStructure

💋💋数据结构、算法总结、学习算法的时间复杂度、空间复杂度、分析算法特点以及应用、Java面试难题、Android面试难题
Java
1,110
star
2

S-MVP

🔥🔥优化版MVP,使用注解泛型简化代码编写,使用模块化协议方便维护,APT过程使用注解解析器利用JavaPoet🌝完成重复模块的编写,利用ASpect+GradlePlugin 完成横向AOP编程+Javassist动态字节码注入+Tinker实现热修复+Retrofit实现优雅网络操作+RxJava轻松玩转数据处理
Java
1,084
star
3

GradlePluginDevelop

💍Gradle 执行流程、什么叫DSL、领域专用语言、Gradle常见用法、Gradle高级插件用法、Gradle对Android优化、结合Javassist使用给上一层楼以及Gradle开发中的遇到的问题
Groovy
465
star
4

Relax

☘☘Relax 基于Kotlin语言编写的一套组件化框架,不紧整体组件化、内部也高度组件化🎋你可配置MVP、MVVM的开发模式、也可以配置所需要的业务组件🍁🍁
Kotlin
242
star
5

DeepLearn-Tensorflow

✨✨开始迈向人工智能、机器学习、深度学习,学习主流的深度学习框架Tensorflow之旅
Python
183
star
6

ComputerBookShare

📚📚计算机电子图书分享🐬,欢迎大家分享自己的电子书到这里来,让大家寻找资源不那么苦恼🐳,让大家共同成长学习💥,资源长期有效
164
star
7

KAdapter

封装Kotlin版本RecyclerView Adapter,使用DSL创建Adapter,体验不一样的简单
Kotlin
44
star
8

KotlinNote

Kotlin 学习笔记
Kotlin
6
star
9

AndroidPluginFramework

Android插件化开发框架、DexClassLoader
Java
5
star
10

JNI_NDK

JNI技术、NDK技术、HOOK技术、视频直播技术
C
5
star
11

EventDriver

发送事件,不需要关心接收者的生命周期
Kotlin
4
star
12

ComponentDevelopment

组件化开发框架
Java
3
star
13

JavaPoetSample

JavaPoet的一个简单例子
Java
1
star
14

CameraTextureView

通过TextureView 自定义相机
Kotlin
1
star
15

VolleyOKhttp

Java
1
star
16

TechBox

upload Techbox
Java
1
star
17

DoubleProcessKeep

双进程保护
Java
1
star
18

AndroidService

Service apk开发
Java
1
star