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

点击Button后迅速抬起,Button上的文本不会还原

点击Button后迅速抬起,Button上的文本不会还原,会保持为“松开结束”。这是为什么呢?

相关代码片段:

        @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:
			setBackgroundResource(R.drawable.recorder_button_recording);
			setText(R.string.button_recording);
			dialogManager.initDialog();
			break;
		case MotionEvent.ACTION_MOVE:
			if (currentState == STATE_RECORDING) {
				if (wantToCancel(x, y)) {
					changeToState(STATE_CANCEL);
				}
			} else if (currentState == STATE_CANCEL) {
				if (!wantToCancel(x, y)) {
					changeToState(STATE_RECORDING);
				}
			}
			break;
		case MotionEvent.ACTION_UP:
			if(!isLongClicked){
				reset();
				return super.onTouchEvent(event);
			}
			if(timeLength < 500){
				handler.sendEmptyMessage(MSG_DIALOG_TOOSHORT);
				audioManager.cancel();
				handler.sendEmptyMessageDelayed(MSG_DIALOG_DIMISS, 1500);
			}
			if (currentState == STATE_RECORDING) {
				handler.sendEmptyMessage(MSG_DIALOG_DIMISS);
				if(listener != null){
					listener.onFinished(audioManager.getFilePath(), timeLength);
				}
				audioManager.release();
			} else if (currentState == STATE_CANCEL) {
				handler.sendEmptyMessage(MSG_DIALOG_DIMISS);
				audioManager.cancel();
			}
			reset();
			break;
		}
		return super.onTouchEvent(event);
	}
	
	private void reset() {
		changeToState(STATE_NORMAL);
		timeLength = 0;
		isLongClicked = false;
	}
	
	private void changeToState(int state) {
		if (currentState != state) {
			switch (state) {
			case STATE_NORMAL:
				currentState = STATE_NORMAL;
				setBackgroundResource(R.drawable.recorder_button_normal);
				setText(R.string.button_normal);
				break;
			case STATE_RECORDING:
				currentState = STATE_RECORDING;
				setBackgroundResource(R.drawable.recorder_button_recording);
				setText(R.string.button_recording);
				dialogManager.showDialog(STATE_RECORDING);
				break;
			case STATE_CANCEL:
				currentState = STATE_CANCEL;
				setBackgroundResource(R.drawable.recorder_button_recording);
				setText(R.string.button_cancel);
				dialogManager.showDialog(STATE_CANCEL);
				break;
			}
		}
	}


正在回答

1 回答

ACTION_DOWN的时候就应该把状态切换成STATE_RECORDING

不然的话等你ACTION_UP时,执行了reset(),changeToState(STATE_NORMAL);而此时的currentState还是STATE_NORMAL。

那你的这句if (currentState != state){} 就执行不进去了


我也是看代码分析的,若不正确还请见谅

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

举报

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

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

进入课程

点击Button后迅速抬起,Button上的文本不会还原

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