1、项目界面展示:
2、项目代码整体结构简析:
(1)AudioRecorderButton类(录音按钮):State:STATE_NORMAL【正常状态】、STATE_RECORDERING【正在录音的状态】、STATE_WANT_TO_CALCEL【想要放弃录音的装填】;
(2)AudioDialogManage类(录音过程中的提示对话框):Style:RECORDERING【正在录音】、WANT_TO_CANCEL【取消提示对话框】、TOO_SHAORT【录音时间过短提醒对话框】;
(3)AudioManage类(控制录音):prepare()(end prepare-—》callback)【去录音】, cancel()【取消录音】, release()【正常结束】(-—》callbackToActivity), getVoiceLevel()【获得音量大小】;
伪码展示:
class AudioRecorderButton
{
onTouchEvent()
{
DOWN: // 按下
changeButtonState(STATE_RECORDERING);
onLongClick -> AudioManage.prepare() -> end prepare
-> AudioDialogManage.showDialog(RECORDERING)
MOVE: // 滑动
if(wantCancel(x,y))
{
changeButtonState(STATE_WANT_TO_CALCEL); //更新Button
AudioDialogManage.showDialog(WANT_TO_CANCEL); //更新Dialog
}
else
{
changeButtonState(STATE_RECORDERING);
AudioDialogManage.showDialog(RECORDERING);
}
UP: // 抬起
if(wantCancel == curState) //取消
{
AudioManage.cancel();
}
if(STATE_RECORDERING = curState) //正常结束
{
AudioManage.release();
callbackToActivity(path,time);
}
......
}
}
1、主界面布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 语音列表 -->
<ListView
android:id="@+id/voiceNotesListView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#ebebeb"
android:divider="@null"
android:dividerHeight="10dp" >
</ListView>
<!-- 底部按钮布局 -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<songshi.suishou.tool.AudioRecorderButton
android:id="@+id/recorderButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="7dp"
android:gravity="center"
android:padding="5dp"
android:minHeight="0dp"
android:background="@drawable/btn_recorder_normal"
android:text="@string/str_recorder_normal"
android:textColor="#727272"
>
</songshi.suishou.tool.AudioRecorderButton>
<View android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#ccc"/>
</FrameLayout>
</LinearLayout>
<string name="str_recorder_normal">按住 说话</string>
<string name="str_recorder_recording">松开 结束</string>
<string name="str_recorder_want_cancel">滑动手指,取消记录</string>
2、AudioRecorderButton类:
package com.example.voicenotes;
import com.example.voicenotes.AudioManage.AudioStateListenter;
import android.content.Context;
import android.os.Environment;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class AudioRecorderButton extends Button implements AudioStateListenter {
private static final int STATE_NORMAL = 1; //默认状态
private static final int STATE_RECORDERING = 2; //录音状态
private static final int STATE_WANT_TO_CALCEL = 3; //取消状态