Android如何实现客户端语音动弹界面

  介绍

这篇文章主要介绍Android如何实现客户端语音动弹界面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体内容如下:

 Android如何实现客户端语音动弹界面

首先,整体界面分三部分,最上层自定义ActionBar相信不需要我讲大家就能看出来了。

中间部分是文字动弹部分,主体就是一个设置了填充(保证金)的EditText在EditText下面是一个剩余输入字数的描述。其实在“您还可以输入XX字”的左边还有一个用于显示录音图标的ImageView。

最下层是本文主要讲解的录音自定义控件的实现。

下面一整块整体都是自定义控件的区域,我将其命名为RecordButton,是一个继承自RelateiveLayout的ViewGroup。

在其中包括了左中右三个ImageView:试听与删除,中间的录音按钮。

在录音按钮的上下各有一个用于提示的TextView。

整体布局的载入可以通过调用<代码>视图。增压泵(cxt出来。xxx, null);>

同前一篇讲的一样,作为控件界面控制逻辑,我们主要看一下onTouchEvent方法:当手指按下的时候,初始化录音器。手指在屏幕上移动的时候如果滑到按钮之上的时候,事件。getY会返回一个负值(因为滑出控件了嘛)。这里我写的是-50年主要是为了多一点缓冲,防止误操作。

先来看代码

@Override   ,public  boolean  onTouchEvent (MotionEvent 事件),{   if 才能;(mAudioFile ==, null), {   ,,return 假;   ,,}   if 才能;(! mTouchInPlayButton), {   ,,return 假;   ,,}   switch 才能;(event.getAction ()), {   case 才能;MotionEvent.ACTION_DOWN:   ,,initBorderLine ();   ,才能打破;   case 才能;MotionEvent.ACTION_MOVE:   ,,if  (event.getY (), & lt;, 0), {   ,,,viewToInit ();   ,,,休息;   ,,}   ,,if  (event.getX(),祝辞,mRightButtonX), {   ,,,mIsCancel =,真的;   ,,,scaleView (mImgDelete, 1.5 f);   ,,},else  if  (event.getX (), & lt;, mLeftButtonX), {   ,,,scaleView (mImgListen, 1.5 f);   ,,},{else    ,,,mIsCancel =,假;   ,,,viewToInit ();   ,,}   ,才能打破;   case 才能;MotionEvent.ACTION_UP:   ,,if  (mIsCancel  | |, event.getY (), & lt;, -50), {   ,,,cancelRecord ();   ,,},else  if  (event.getX (), & lt;, mLeftButtonX),{//,试听   ,,,playRecord ();   ,,,finishRecord ();   ,,},else  if  (event.getX(),祝辞,mRightButtonX),{//,删除   ,,,cancelRecord ();   ,,},{else    ,,,finishRecord ();   ,,}   ,,viewToInit ();   ,,bottomFlag.setVisibility (View.VISIBLE);   ,,topFlag.setVisibility (View.GONE);   ,,mIsCancel =,假;   ,,mTouchInPlayButton =,假;   ,才能打破;   ,,}   return 才能;真实;   以前,}

其中录音相关的工具类还是和之前的一样,这就是把功能与视图分开的好处,随时用随时复制粘贴过来就用了。

/* *   ,* {@link  # RecordButton}需要的工具类   *大敌;   ,* @author  kymjs (http://www.kymjs.com/)   ,*/public  class  RecordButtonUtil  {   ,public  static  final  String  AUDOI_DIR =,环境   ,,.getExternalStorageDirectory () .getAbsolutePath (), +,“/oschina/audio",//,录音音频保存根路径   ,private  String  mAudioPath;//,要播放的声音的路径   ,private  boolean  mIsRecording;//,是否正在录的音   ,private  boolean 失误;//,是否正在播放   ,private  OnPlayListener 侦听器;   ,//初始化,录音器   ,private  void  initRecorder (), {   时间=mRecorder 才能;new  MediaRecorder ();   mRecorder.setAudioSource才能(MediaRecorder.AudioSource.MIC);   mRecorder.setOutputFormat才能(MediaRecorder.OutputFormat.AMR_NB);   mRecorder.setAudioEncoder才能(MediaRecorder.AudioEncoder.AMR_NB);   mRecorder.setOutputFile才能(mAudioPath);   mIsRecording =,才能正确;   ,}   ,/* *开始录音,并保存到文件中,*/,public  void  recordAudio (), {   initRecorder才能();   try {才能   ,,mRecorder.prepare ();   ,,},catch  (IOException  e), {   ,,e.printStackTrace ();   ,,}   mRecorder.start才能();   ,}/* *大敌;获取音量的值,只是针对录音音量,*/,public  int  getVolumn (), {   int 才能;volumn =, 0;//才能,录了音   if 才能;(mRecorder  !=, null ,,, mIsRecording), {   ,,volumn =, mRecorder.getMaxAmplitude ();   ,,if  (volumn  !=, 0)   ,,,volumn =, (int), (10, *, Math.log(抑扬顿挫),/,Math.log (10)),/, 7;   ,,}   return 才能,抑扬顿挫;   ,}   ,/* *停止录音,*/,public  void  stopRecord (), {   if 才能;(mRecorder  !=, null), {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Android如何实现客户端语音动弹界面