今天工作上需要做一个仿微信语音聊天中的按住说话的功能。其实很简单,主要就是利用MediaRecorder实现录音,用MediaPlayer实现播放功能。下面我就具体说一下是怎么实现的。

1,首先对按钮的onTouch事件进行监听。

<span style="font-size:18px;">mBtnVoice.setText("按住说话");mBtnVoice.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startVoice();break;case MotionEvent.ACTION_UP:stopVoice();break;default:break;}return false;}});</span>

当按下的时候,开始进行录音,

<span style="font-size:18px;">/** 开始录音 */private void startVoice() {// 设置录音保存路径mFileName = PATH + UUID.randomUUID().toString() + ".amr";String state = android.os.Environment.getExternalStorageState();if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) {Log.i(LOG_TAG, "SD Card is not mounted,It is  " + state + ".");}File directory = new File(mFileName).getParentFile();if (!directory.exists() && !directory.mkdirs()) {Log.i(LOG_TAG, "Path to file could not be created");}Toast.makeText(getApplicationContext(), "开始录音", 0).show();mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mRecorder.setOutputFile(mFileName);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);try {mRecorder.prepare();} catch (IOException e) {Log.e(LOG_TAG, "prepare() failed");}mRecorder.start();}</span>

这个方法中主要有4个方法,

<span style="font-size:18px;">设置用于录制的音源。
setAudioSource( audio_source)
设置在录制过程中产生的输出文件的格式
setOutputFormat(output_format)
设置输出文件的路径
setOutputFile(String path)
设置audio的编码格式
void setAudioEncoder(<span style="color:#00ff;">int</span><span style="color:#000000;"> audio_encoder)</span>
</span>

当手松开按钮时停止录音

<span style="font-size:18px;">/** 停止录音 */private void stopVoice() {mRecorder.stop();mRecorder.release();mRecorder = null;mVoicesList.add(mFileName);mAdapter = new MyListAdapter(RecordActivity.this);mVoidListView.setAdapter(mAdapter);Toast.makeText(getApplicationContext(), "保存录音" + mFileName, 0).show();}</span>

2,上面已经完成音频的录制,下面就该说说播放了。

<span style="font-size:18px;">mPlayer = new MediaPlayer();
mVoidListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View view,int position, long arg3) {try {mPlayer.reset();mPlayer.setDataSource(mVoicesList.get(position));mPlayer.prepare();mPlayer.start();} catch (IOException e) {Log.e(LOG_TAG, "播放失败");}}});
</span>

我这里录完音频,直接将其显示到列表,点击列表项播放。

到此为止,一个简单的按住说话功能就实现了。在此基础上稍作修改就可以做出微信语音的效果了。

android 实现按住说话功能相关推荐

  1. android长按动画效果,android 实现按住说话功能

    今天工作上需要做一个仿微信语音聊天中的按住说话的功能.其实很简单,主要就是利用MediaRecorder实现录音,用MediaPlayer实现播放功能.下面我就具体说一下是怎么实现的. 1,首先对按钮 ...

  2. 小程序仿微信聊天按住说话功能

    小程序仿微信聊天按住说话功能 实现:按住说话有录音动画,上滑可取消发送,松开发送录音 录音授权判断 # .wxml <view class="btn {{touchBtn?'hover ...

  3. php按住说话然后播放,小程序仿微信聊天按住说话功能

    小程序仿微信聊天按住说话功能 实现:按住说话有录音动画,上滑可取消发送,松开发送录音 录音授权判断 # .wxml bind:longpress="onLongpress" cat ...

  4. uniapp微信小程序实现按住说话功能

    前端页面布局代码 描述:@longpress是uniapp的事件,长按时触发的事件,@touchend事件可以监听松开按钮时触发的. <!-- 上传语音 --><view class ...

  5. 移动端按住说话功能实现

    2019独角兽企业重金招聘Python工程师标准>>> (function(){var LSwiperMaker = function(o){ var that = this;thi ...

  6. android模拟微信聊天功能,android仿微信聊天界面 语音录制功能

    本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 android:layout_width="fill_parent" and ...

  7. [MAUI]模仿微信“按住-说话”的交互实现

    文章目录 创建页面布局 创建手势控件 创建TalkBox 创建动画 拖拽物动画 按钮激活动画 TalkBox动画 Layout动画 项目地址 .NET MAUI 跨平台框架包含了识别平移手势的功能,在 ...

  8. Android实现按住缩小 松开放大的效果

    在开发过程中  我们有时候会使用一种效果,如按钮按下时会缩小,松开变回原大小,下面我们试一下实现这个效果. 主要的思想就是使用view的setScaleX  和setScaleY这两个方法 ,在onT ...

  9. Android 程序自动更新功能模块实现

    2019独角兽企业重金招聘Python工程师标准>>> Android 程序自动更新功能模块实现 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程 ...

最新文章

  1. 自学python需要买书吗-学习Python的正确姿势—基础教学,教科书该怎么买?
  2. UA OPTI512R 傅立叶光学导论23 透镜成像系统的物理光学模型
  3. android开发 java与c# 兼容AES加密
  4. python编程可以做什么菜_Python 编程! 我是菜菜菜鸟 大家帮帮忙
  5. git rebase基础
  6. vertical-align属性
  7. 菜鸟学习之Java入门基础知识
  8. 极客学院小程序视频教程
  9. 【云计算•云原生】1.什么是云计算?它为什么这么火?
  10. 3.1 人工智能定义
  11. curl使用用户名密码
  12. 网络规划和设计 - 关键路径法 CPM(关键路径、松弛时间)
  13. 6-DoF问题相关基础知识笔记
  14. 计算机网络 —— TCP的三次握手四次挥手
  15. mint-ui 图片懒加载及请求数据加载中提示方法
  16. Emgu-WPF 激光雷达研究-绘制雷达图
  17. 深度学习中的优化方法总结
  18. MySQL 5.7 Windows 免安装版 配置
  19. Ubuntu(Linux)下的整站下载工具
  20. fairyguiUI适配问题

热门文章

  1. 负载平衡是什么意思_什么是负载平衡?为什么要使用它?
  2. 微型计算机定义,微处理器、微型计算机与微型计算机系统的定义
  3. 兆信rxn305d使用说明书_直流电源 RXN-305D-II
  4. 诚之和:小鹏汽车财报里的难言之隐
  5. 关于网站改版注意的网站优化问题
  6. 很实用的一款数据恢复软件 easyrecovery 分享给大家
  7. 推荐在线编程学习网站
  8. python爬虫抓包工具_「docker实战篇」python的docker爬虫技术-fiddler抓包软件详细配置(七)...
  9. 每天一段java代码-------第16天(最大公约数最小公倍数)
  10. Unity丛林战争学习01_TCP_异步接受连接和异步接收消息