为了账号安全,请及时绑定邮箱和手机立即绑定

点击一下按钮,然后就报错了,长按的时候或录音时间过短都没问题,报错是内存溢出和空指针异常,不知道怎么回事

/** 复写onTouchEvent */
	@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:
			if (isRecording) {// 是否在录音
				/* 根据x,y的坐标来判断是否想要取消 */
				if (wantToCancel(x, y)) {
					changeState(STATE_WANT_TO_CANCEL);
				} else {
					changeState(STATE_RECORDING);
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			/*
			 * 五种情况 1、down以后还没触发longclick 2、down以后触发longClick还没有prepaer完毕就松开了
			 * 3、录音时间很短,没有达到我们设定的值 4、 5、
			 */
			if (!mReady) {
				reset();
				super. onTouchEvent(event);
			}
			if (!isRecording || mTime < 0.6f) {
				mDialogManager.tooShort();
				mAudioManager.cancel();
				mHandler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1300);
			}else 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 = 0;
		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;

	}


正在回答

1 回答

按一下就放,UP时进入的逻辑可能是!Ready,你上面的代码少写了return:

if (!mReady)
{
	reset();
	return super.onTouchEvent(event);
}


0 回复 有任何疑惑可以回复我~
#1

时光鸡丶 提问者

非常感谢!
2015-07-15 回复 有任何疑惑可以回复我~
#2

qq_宝慕林2185875 回复 时光鸡丶 提问者

求这个功能的源码
2018-12-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android-仿微信语音聊天
  • 参与学习       43200    人
  • 解答问题       220    个

结合自定义View和API,Dialog管理等实现实现微信语音

进入课程

点击一下按钮,然后就报错了,长按的时候或录音时间过短都没问题,报错是内存溢出和空指针异常,不知道怎么回事

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信