Android 麦克风录音动画

  • 源代码 RecordView.java
  • R.drawable.voice_recording

源代码 RecordView.java

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
/*** Copyright (C), 2015/6/12, flyzhang* Author: flyzhang* Date: 2019/9/27 8:34* Description:* <p>* </p>* History:* <author>      <time>      <version>      <desc>* 作者姓名       修改时间     版本号         描述*/
public class RecordView extends View {private int mImageW = 42;//新mic图片宽private int mImageH = 42;//新mic图片高private int mMarginTop = 25, mTextMarginBottom = 11;//mic图片居上距离 文字居底部距离private int SCREEN_HEIGHT = 0, SCREEN_WIDTH = 0;//屏幕宽高private Paint mImagePaint, mTextPaint, mVoiceRectPaint, mBackgroundPaint;//mic 文字 进度条 背景private int mVoiceRectW = 1, mVoiceRectH = 10, mInterval = 3, mVoiceRectMarginTop = 83; //宽、高、间隔、进度条居上距离private int mTextSize = 12;//文本字体大小private Bitmap mVoiceRecording;//mic图片private int mVoiceRectStart = 0, mDescriptionW = 0;//进度条开始左边位置、文字长度private Rect mTextRect;//计算文字长度矩形private String mDescription = "松开停止";private int mCurrentPosition = 0;//当前位置private int mBackgroundRound = 3;//背景圆角private final int COUNT = 16;//进度条格数public RecordView(Context context) {super(context);init();}public RecordView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init();}private void init() {DisplayMetrics dm = getResources().getDisplayMetrics();mImageW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mImageW, dm);mImageH = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mImageH, dm);mMarginTop = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mMarginTop, dm);mTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mTextSize, dm);mTextMarginBottom = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mTextMarginBottom, dm);mVoiceRectW = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectW, dm);mVoiceRectH = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectH, dm);mInterval = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mInterval, dm);mVoiceRectMarginTop = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mVoiceRectMarginTop, dm);mBackgroundRound = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mBackgroundRound, dm);mImagePaint = new Paint();mVoiceRectPaint = new Paint();mVoiceRectPaint.setColor(Color.WHITE);mBackgroundPaint = new Paint();mBackgroundPaint.setColor(Color.parseColor("#B3000000"));//背景颜色mTextPaint = new Paint();mTextPaint.setTextSize(mTextSize);mTextPaint.setColor(Color.parseColor("#B3FFFFFF"));//文字颜色mVoiceRecording = BitmapFactory.decodeResource(getResources(), R.drawable.voice_recording);mVoiceRecording = scaleBitmap(mVoiceRecording, mImageW, mImageH);mTextRect = new Rect();setWillNotDraw(false);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (SCREEN_HEIGHT == 0 || SCREEN_WIDTH == 0) {SCREEN_HEIGHT = getHeight();SCREEN_WIDTH = getWidth();}if (mVoiceRectStart <= 0) {mVoiceRectStart = SCREEN_WIDTH / 2 - (COUNT * mVoiceRectW + (COUNT - 1) * mInterval) / 2;}if (mDescriptionW <= 0) {mTextPaint.getTextBounds(mDescription, 0, mDescription.length(), mTextRect);mDescriptionW = mTextRect.width();}canvas.drawRoundRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, mBackgroundRound, mBackgroundRound, mBackgroundPaint);//画灰色背景和圆角canvas.drawBitmap(mVoiceRecording, SCREEN_WIDTH / 2 - mVoiceRecording.getWidth() / 2, mMarginTop, mImagePaint);//画mic图片//画前几个是白色 后几个是灰色for (int i = 0; i < COUNT; i++) {if (i < mCurrentPosition) {mVoiceRectPaint.setColor(Color.WHITE);} else {mVoiceRectPaint.setColor(Color.parseColor("#73FFFFFF"));}canvas.drawRect(i * mVoiceRectW + (i * mInterval) + mVoiceRectStart, mVoiceRectMarginTop, i * mVoiceRectW + (i * mInterval) + mVoiceRectW + mVoiceRectStart, mVoiceRectMarginTop + mVoiceRectH, mVoiceRectPaint);}canvas.drawText(mDescription, SCREEN_WIDTH / 2 - mDescriptionW / 2, SCREEN_HEIGHT - mTextMarginBottom, mTextPaint);//画文字 松开停止}/*** [0 - 16)** @param p [0 - 16)*/public void setIndex(int p) {if(p < 0 ){p = 0;}if(p >= COUNT){p = COUNT -1 ;}mCurrentPosition = p;postInvalidate();}/*** 设置 百分比* @param percent 100%*/public void setIndex(double percent){int p = (int) (COUNT * percent);setIndex(p);}/*** bitmap 缩放** @param origin    源* @param newWidth  宽* @param newHeight 高* @return bitmap*/private Bitmap scaleBitmap(Bitmap origin, int newWidth, int newHeight) {if (origin == null) {return null;}int height = origin.getHeight();int width = origin.getWidth();float scaleWidth = ((float) newWidth) / width;float scaleHeight = ((float) newHeight) / height;Matrix matrix = new Matrix();matrix.postScale(scaleWidth, scaleHeight);// 使用后乘Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);if (!origin.isRecycled()) {origin.recycle();}return newBM;}
}
        final RecordView recordView = findViewById(R.id.recordView);new Thread(new Runnable() {@Overridepublic void run() {while (true) {Random r = new Random();double a = (r.nextInt(100) + 1) * 0.01;recordView.setIndex(a);try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();

R.drawable.voice_recording

![图自行下载](https://img-blog.csdnimg.cn/20190927142314605.png)

Android 麦克风录音动画相关推荐

  1. Android麦克风录音的实现

    最近公司有一个业务,就是通过IM发送音频,我用的是环信的第三方,自定义发送音频,写了一个录音的demo,录制完成之后发送. 这个Demo测试之后感觉还不错,分享一下. 一.添加权限: <uses ...

  2. android 麦克风录音输出

    添加权限 <!-- AUX --><uses-permission android:name="android.permission.RECORD_AUDIO" ...

  3. android麦克风录音权限设置,小米9 SE怎么设置麦克风权限 小米9 SE打开录音权限的设置方法...

    小米9 SE怎么设置麦克风权限?平时我们用小米9 se第一次打开软件时,会遇到要打开麦克风权限的提示,如果第一次拒绝了这个麦克风权限的话,后面要打开,就需要来进行设置一下了,今天新机汇小编为大家分享一 ...

  4. Android按下录音录音动画效果 ,自定义录音、播放动画View

    Android按下录音录音动画效果 ,自定义录音.播放动画View https://download.csdn.net/download/abc2522/10327428?spm=1001.2101. ...

  5. android麦克风监听动画效果,微信小程序实现录音时的麦克风动画效果实例

    前言 这个简单的麦克风demo的创意是来源于"包你说"中的录音效果,实现的方式其实也并不难,但对于小程序中的简易动画的使用的确很实用. 效果 先来看个demo,gif帧数比较低,实 ...

  6. android按住录音按钮_Android实现录音方法(仿微信语音、麦克风录音、发送语音、解决5.0以上BUG)...

    先给大家展示下效果图,如果大家感觉不错,请参考使用方法, 效果图如下所示: 使用方法: 录音工具类:AudioRecoderUtils.java,代码如下: public class AudioRec ...

  7. Android 录音实现方法、仿微信语音、麦克风录音、发送语音

    效果图(注!由于使用的模拟器录制,所以图片中的录音时候话筒上下波动比较小,手机上正常!): 使用方法: 录音工具类:AudioRecoderUtils.java,代码如下: public class ...

  8. Android 录音实现方法、仿微信语音、麦克风录音、发送语音、解决5.0以上BUG

    原文地址:https://blog.csdn.net/fan7983377/article/details/51750583 本文修改自:http://www.jianshu.com/p/06eca5 ...

  9. Android模仿淘宝语音输入条形动画,录音动画自定义View

    Android模仿淘宝语音输入条形动画自定义View,类似柱状音频,折线音频,音乐跳动,音频跳动,录音动画,语音输入效果 地址: https://github.com/xfans/VoiceWaveV ...

最新文章

  1. 总结 | 2020年TOP 10计算机视觉论文:代码,解读,还有demo视频!
  2. Linux如何在系统启动时自动加载模块
  3. matlab引擎函数,Matlab引擎库函数
  4. arduinopn532模块_树莓派使用libnfc驱动ITEAD NFC PN532模块
  5. 基于新标注模式的实体和关系联合抽取方法(Joint Extraction of Entities and Relations Based on a Novel Tagging Scheme)
  6. html快闪软件制作,教你如何用PPT轻松完成快闪视频制作?
  7. 主板风扇转速测试软件,技嘉风扇转速调节及超频软件EasyTune6
  8. 如何以16进制打开dll文件
  9. textview 属性大全
  10. m3u8视频通用下载器
  11. 洞态IAST实现思路分享及讨论
  12. 转换小写金额为大写金额
  13. android 服务自动运行怎么办,Android服务开机自动运行
  14. VMware 苹果虚拟机 Xcode真机调试失败 设备不信任该机器
  15. 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...
  16. linux ps aux 命令解释
  17. 7-1 树的同构 【已改正】
  18. 朴素贝叶斯算法,点进来了解了解。
  19. ANSI环境下支持多语言输入的单行文本编辑器 V0.01
  20. 什么是云计算,云计算的未来应用和前景?

热门文章

  1. 关于Linux的那些事儿--系统状态检测命令
  2. 人力资源职位英文缩写汇总(人力资源岗位术语缩写)
  3. 微信公众号事件推送(点击推送图文)
  4. 第5章 虚拟存储器
  5. 分组卷积/转置卷积/空洞卷积/反卷积/可变形卷积/深度可分离卷积/DW卷积/Ghost卷积/
  6. wps.wrod.excel基本操作总结
  7. 心流——微妙的人际关系
  8. Java面试题--jvm
  9. 软件测试工程师简历项目经验怎么写(含真实简历)
  10. Dubbo 支持哪些通信协议?