亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

我想問一下為什么我正常錄音結束以后正在錄音的dialog沒有dimiss掉一直在顯示呢??

package com.example.administrator.testdemo.com.example.administator.testdemo.view;

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;

import com.example.administrator.testdemo.R;

/**
* Created by Administrator on 2016/8/23.
*/
public class audioRecorderButton extends Button implements AudioManager.AudioStateListener {
? ?private static final int DISTANCE_Y_CANCEL = 50;
? ?private static final int STATE_NORMAL = 1;//默認狀態
? ?private static final int STATE_RECORDING = 2;//錄音狀態
? ?private static final int STATE_WANT_TO_CANCEL = 3;//取消狀態

? ?private static int mCurState = STATE_NORMAL;//當前記錄狀態
? ?private static boolean isRecording = false;//已經開始錄音

? ?private dialogManager mDialogManager;
? ?private AudioManager mAudioManager;
? ?private float mTime;
? ?private boolean mReady;//是否觸發longclick

? ?public audioRecorderButton(Context context, AttributeSet attrs) {
? ? ? ?super(context, attrs);

? ? ? ?String dir = Environment.getExternalStorageDirectory() + "/abc";
? ? ? ?mAudioManager = AudioManager.getInstance(dir);
? ? ? ?mAudioManager.setOnAudioStateListener(this);
? ? ? ?mDialogManager = new dialogManager(getContext());
? ? ? ?setOnLongClickListener(new OnLongClickListener() {
? ? ? ? ? ?@Override
? ? ? ? ? ?public boolean onLongClick(View v) {
? ? ? ? ? ? ? ?mAudioManager.Preparing();
? ? ? ? ? ? ? ?mReady = true;
? ? ? ? ? ? ? ?return false;
? ? ? ? ? ?}
? ? ? ?});
? ?}
//錄音完成后的回調
? ?private interface AudioFinishRecorderListener {
? ? ? ?void onFinish(float second, String filePath);
? ?}

? ?public AudioFinishRecorderListener mListener;

? ?public void setAudioFinishRecorderListener(AudioFinishRecorderListener listener) {
? ? ? ?mListener = listener;

? ?}

? ?private Runnable mGetVoiceLevelRunnable = new Runnable() {
? ? ? ?@Override
? ? ? ?public void run() {
? ? ? ? ? ?while (isRecording) {
? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? ?Thread.sleep(100);
? ? ? ? ? ? ? ? ? ?mTime += 0.1f;
? ? ? ? ? ? ? ? ? ?mHandle.sendEmptyMessage(MSG_VOICE_CHANGE);
? ? ? ? ? ? ? ?} catch (InterruptedException e) {
? ? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ?}
? ? ? ? ? ?}

? ? ? ?}
? ?};
? ?private static final int MSG_DIALOG_PREPARE = 0x110;
? ?private static final int MSG_VOICE_CHANGE = 0x111;
? ?private static final int MSG_DIALOG_DISMISS = 0x112;

? ?private Handler mHandle = new Handler() {
? ? ? ?@Override
? ? ? ?public void handleMessage(android.os.Message msg) {
? ? ? ? ? ?switch (msg.what) {
? ? ? ? ? ? ? ?case MSG_DIALOG_PREPARE:
? ? ? ? ? ? ? ? ? ?isRecording = true;
? ? ? ? ? ? ? ? ? ?mDialogManager.showRecordingDialog();
? ? ? ? ? ? ? ? ? ?new Thread(mGetVoiceLevelRunnable).start();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case MSG_VOICE_CHANGE:
? ? ? ? ? ? ? ? ? ?mDialogManager.updateVoiceLevel(mAudioManager.getVoiceLevel(7));
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case MSG_DIALOG_DISMISS:
? ? ? ? ? ? ? ? ? ?mDialogManager.diMissDialog();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}

? ? ? ?}
? ?};

? ?public void wellPrepare() {
? ? ? ?mHandle.sendEmptyMessage(MSG_DIALOG_PREPARE);
? ?}

? ?public audioRecorderButton(Context context) {
? ? ? ?this(context, null);
? ?}

? ?@Override
? ?public boolean onTouchEvent(MotionEvent event) {
? ? ? ?int action = event.getAction();
? ? ? ?int x = (int) event.getX();
? ? ? ?int y = (int) event.getY();
? ? ? ?switch (action) {
? ? ? ? ? ?case MotionEvent.ACTION_DOWN:
? ? ? ? ? ? ? ?changeState(STATE_RECORDING);
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?case MotionEvent.ACTION_MOVE:
? ? ? ? ? ? ? ?//根據x,y的值,確定是否取消
? ? ? ? ? ? ? ?if (isRecording) {
? ? ? ? ? ? ? ? ? ?if (wantToCancel(x, y)) {
? ? ? ? ? ? ? ? ? ? ? ?changeState(STATE_WANT_TO_CANCEL);
? ? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ? ?changeState(STATE_NORMAL);
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?break;
? ? ? ? ? ?case MotionEvent.ACTION_UP:
? ? ? ? ? ? ? ?if (!mReady){
? ? ? ? ? ? ? ? ? ?reset();
? ? ? ? ? ? ? ? ? ?return super.onTouchEvent(event);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?else if ( !isRecording||mTime < 0.6f) {
? ? ? ? ? ? ? ? ? ?mDialogManager.tooShort();
? ? ? ? ? ? ? ? ? ? ? ?mHandle.sendEmptyMessageDelayed(MSG_DIALOG_DISMISS, 1300);//發送一個延遲,延遲時間為關閉dialog
? ? ? ? ? ? ? ? ? ? ? ?mAudioManager.Cancel();
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?if (mCurState==STATE_RECORDING) //正常錄制結束
? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? mDialogManager.diMissDialog();
? ? ? ? ? ? ? ? ? ?mAudioManager.Release();
? ? ? ? ? ? ? ? ? ?if (mListener!=null){
? ? ? ? ? ? ? ? ? ? ? ?mListener.onFinish(mTime,mAudioManager.getCurrentFilePath());
? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?else if (mCurState == STATE_WANT_TO_CANCEL) {
? ? ? ? ? ? ? ? ? ?mDialogManager.diMissDialog();
? ? ? ? ? ? ? ? ? ?mAudioManager.Cancel();
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?reset();
? ? ? ? ? ? ? ?break;
? ? ? ?}
? ? ? ?return super.onTouchEvent(event);
? ?}

? ?//恢復狀態及標志位
? ?private void reset() {
? ? ? ?isRecording = false;
? ? ? ?mReady = false;
? ? ? ?mTime = 0f;
? ? ? ?changeState(STATE_NORMAL);
? ?}

? ?private boolean wantToCancel(int x, int y) {

? ? ? ?if (x < 0 || x > getWidth()) {
? ? ? ? ? ?return true;
? ? ? ?}
? ? ? ?if (y < -DISTANCE_Y_CANCEL || y > getHeight() + DISTANCE_Y_CANCEL) {
? ? ? ? ? ?return true;
? ? ? ?}

? ? ? ?return false;
? ?}

? ?private void changeState(int state) {
? ? ? ?if (mCurState != state) {
? ? ? ? ? ?mCurState = state;
? ? ? ? ? ?switch (state) {
? ? ? ? ? ? ? ?case STATE_NORMAL:
? ? ? ? ? ? ? ? ? ?setBackgroundResource(R.drawable.btn_recorder_normal);
? ? ? ? ? ? ? ? ? ?setText(R.string.str_recorder_normal);
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case STATE_WANT_TO_CANCEL:
? ? ? ? ? ? ? ? ? ?setBackgroundResource(R.drawable.btn_recording);
? ? ? ? ? ? ? ? ? ?setText(R.string.str_recorder_want_cancel);
? ? ? ? ? ? ? ? ? ?mDialogManager.wanToCancel();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ?case STATE_RECORDING:
? ? ? ? ? ? ? ? ? ?setBackgroundResource(R.drawable.btn_recording);
? ? ? ? ? ? ? ? ? ?setText(R.string.str_recorder_recording);
? ? ? ? ? ? ? ? ? ?mDialogManager.recording();
? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ?}

? ? ? ?}
? ?}

}



正在回答

1 回答

case MotionEvent.ACTION_UP:

if(!mReady)

{

reset();

return super.onTouchEvent(event);

}

if(!isRecording || mTime < 0.6f)

{

System.out.println("錄制時間過短");

mDialogManager.tooShort();

mAudioManager.cancel();

mHandler.sendEmptyMessageAtTime(MSG_DIALOG_DISMISS, 1300);

}

else if(mCurState == STATE_RECORDING)//正常結束錄制

{

System.out.println("正常錄制結束");

mDialogManager.dismissDialog();

mAudioManager.release();

if(mListener != null)

{

mListener.onFinish(mTime, mAudioManager.getCurrentFilePath());

}

}

else if(mCurState == STATE_WANT_TO_CANCEL)

{

System.out.println("取消了");

mDialogManager.dismissDialog();

mAudioManager.cancel();

}

reset();

break;

}


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android-仿微信語音聊天
  • 參與學習       43189    人
  • 解答問題       248    個

結合自定義View和API,Dialog管理等實現實現微信語音

進入課程

我想問一下為什么我正常錄音結束以后正在錄音的dialog沒有dimiss掉一直在顯示呢??

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號