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

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

代碼照著敲的 檢查了好幾次 就是所有的按鈕狀態 包括dialog 都不變化 我再 onTouch 的三個方法里面全部輸出了 log log都正常展示 急!老師能幫我看下嘛

public?class?AudioRecorderButton?extends?Button?{
private?static?final?int?DISTANCE_Y_CANCEL?=?50;
/**?按鈕的三種狀態?*/
private?static?final?int?STATE_NORMAL?=?1;//?正常狀態
private?static?final?int?STATE_RECRODING?=?2;//?錄音狀態
private?static?final?int?STATE_WANT_CANEL?=?3;//?取消狀態
private?int?mCurSTATE?=?STATE_NORMAL;//?變量?記錄當前按鈕的狀態?默認下為正常狀態
private?boolean?isRecording?=?false;//?如果是已經開始錄音
private?DialogManager?mDialogManager;
public?AudioRecorderButton(Context?context,?AttributeSet?attrs)?{
super(context,?attrs);
mDialogManager?=?new?DialogManager(getContext());
setOnLongClickListener(new?OnLongClickListener()?{
@Override
public?boolean?onLongClick(View?v)?{
mDialogManager.showRecordingDialog();
isRecording?=?true;
return?false;
}
});
}
public?AudioRecorderButton(Context?context)?{
this(context,null);
}
/**
*?重寫按鈕Button?的?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://?按鈕按下
?????Log.e("AudioRecorderButton",?"已經按下-------x="+x+"y="+y);
?????changeState(STATE_RECRODING);
?????break;
?case?MotionEvent.ACTION_MOVE://?按鈕移動時
????if?(isRecording)?{
????//?根據用戶移動的?xy的坐標判斷用戶是否想要取消當次語音發送
????Log.e("AudioRecorderButton",?"x="+x+"y="+y);
????if?(wantCancel(x,?y))?{
????changeState(STATE_WANT_CANEL);
????}?else?{
????changeState(STATE_RECRODING);
????}
????}?else?{//?提示錄音時間太短?
????}
????break;
case?MotionEvent.ACTION_UP://?按鈕松開時
????Log.e("AudioRecorderButton",?"已經松開-------x="+x+"y="+y);
????if?(mCurSTATE?==?STATE_RECRODING)?{//?是錄音
????mDialogManager.dimissDialog();
????}?else?if?(mCurSTATE?==?STATE_WANT_CANEL)?{//?想取消
????mDialogManager.dimissDialog();
????}
????reset();
break;
}
return?true;
}
/**
*?恢復狀態和標志位
*/
private?void?reset()?{
isRecording?=?false;
changeState(STATE_NORMAL);
}
private?boolean?wantCancel(int?x,?int?y)?{
if?(x?<?0?||?x?>?this.getWidth())?{//手指滑動已經超出按鈕
return?true;
}
if?(y?<?-DISTANCE_Y_CANCEL?||?y?>?DISTANCE_Y_CANCEL?+?getHeight())?{
return?true;
}
return?false;
}
private?void?changeState(int?CURRENT_STATE)?{
if?(CURRENT_STATE?!=?mCurSTATE)?{//?當前傳入狀態不等于當前默認狀態
mCurSTATE?=?CURRENT_STATE;
switch?(mCurSTATE)?{
case?STATE_NORMAL:
setBackgroundResource(R.drawable.but_recorder_normal);
setText(R.string.str_voice_normal);
break;
case?STATE_RECRODING:
setBackgroundResource(R.drawable.but_recording);
setText(R.string.str_voice_recording);
if?(isRecording)?{
?mDialogManager.recording();?
}
break;
case?STATE_WANT_CANEL:
setBackgroundResource(R.drawable.but_recording);
setText(R.string.str_voice_want_cancel);
mDialogManager.wantToCancel();
break;}}}}


正在回答

3 回答

onTouchEvent()里面不能直接return true ,需要 return?super.onTouchEvent(event);



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

好的 謝謝 我試試

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

把onTouchEvent()的返回值改為super.onTouchEvent(event),再試試

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

呦丶耍脾氣丶

你的代碼能執行到case MSG_AUDIO_PREPARED:條件中么?我和你的比對了,但是基本都一致,你檢查出來問題了么?
2015-06-04 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

代碼照著敲的 檢查了好幾次 就是所有的按鈕狀態 包括dialog 都不變化 我再 onTouch 的三個方法里面全部輸出了 log log都正常展示 急!老師能幫我看下嘛

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

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

幫助反饋 APP下載

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

公眾號

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