您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Android如何實(shí)現(xiàn)點(diǎn)擊持續(xù)錄音,松開(kāi)結(jié)束錄音并實(shí)現(xiàn)隨著分貝的大小改變圖片的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
顯示錄音大小的DIALOG實(shí)現(xiàn)
public class VioceDomio { private Context mContext; private AlertDialog dialog ; private AlertDialog.Builder adialogbuile; private ImageView vioce_show; public VioceDomio(Context mContext) { this.mContext=mContext; } public void showRecordingDialog() { adialogbuile = new AlertDialog.Builder(mContext, R.style.Theme_AudioDialog); LayoutInflater inflater = LayoutInflater.from(mContext); View view=inflater.inflate(R.layout.voice_chage,null); vioce_show=(ImageView) view.findViewById(R.id.vioce_show); adialogbuile.setView(view); dialog = adialogbuile.create(); dialog.show(); dialog. getWindow().setLayout(500, 450); } public void HideRecordingDialog() { if(dialog!=null && dialog.isShowing()) { dialog.dismiss(); dialog=null; } } public void ChangeRecordingDialog(double db) { //根據(jù)錄音的分貝改變大小 if(db>=1 && db<=18) { vioce_show.setImageResource(R.drawable.voicesearch_feedback001); }else if(db>=19 && db<=37) { vioce_show.setImageResource(R.drawable.voicesearch_feedback002); }else if(db>=19 && db<=37) { vioce_show.setImageResource(R.drawable.voicesearch_feedback003); } else if(db>=38 && db<=56) { vioce_show.setImageResource(R.drawable.voicesearch_feedback004); }else if(db>=57 && db<=75) { vioce_show.setImageResource(R.drawable.voicesearch_feedback005); }else if(db>=76 && db<=94) { vioce_show.setImageResource(R.drawable.voicesearch_feedback006); }else if(db>=95 && db<=100) { vioce_show.setImageResource(R.drawable.voicesearch_feedback007); } } }
Dialog加載的XML頁(yè)面實(shí)現(xiàn)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="90dp" android:layout_marginTop="5dp" android:id="@+id/bianhua"> <ImageView android:id="@+id/vioce_show" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:src="@drawable/voicesearch_feedback001" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:text="正在錄音中" android:gravity="center" /> </RelativeLayout>
主界面的試下
activoti.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/speak" android:layout_width="wrap_content" android:layout_height="42dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:paddingLeft="10dp" android:layout_weight="0.62" android:background="@drawable/search_ba" android:drawableLeft="@drawable/speak_1" android:gravity="center" android:text="按住請(qǐng)講話?。?!" android:textSize="15sp" android:singleLine="true" android:visibility="gone" /> </LinearLayout >
MainActiovity.java實(shí)現(xiàn)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activoti); send=(Button) findViewById(R.id.send); viocedomio=new VioceDomio(this); speak.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub CountingThreadextends thend=new CountingThreadextends(); if(event.getAction()==MotionEvent.ACTION_DOWN) { //如果按鈕處于按下?tīng)顟B(tài) //錄音 if(!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { Toast.makeText(ChatActivity.this, "SD not ", Toast.LENGTH_SHORT).show(); return false; } String sound_path=time_path+"sound.amr"; try{ soundfile=new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/bishevoice/"+sound_path); Log.d("send_filepath", Environment.getExternalStorageDirectory().getCanonicalFile()+"/bishevoice/"+sound_path); mmedio=new MediaRecorder(); mmedio.setAudioSource(MediaRecorder.AudioSource.MIC); mmedio.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mmedio.setOutputFile(soundfile.getAbsolutePath()); mmedio.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try{ //創(chuàng)建文件,準(zhǔn)備錄制 soundfile.createNewFile(); mmedio.prepare(); }catch(IllegalStateException e) { e.printStackTrace(); } //開(kāi)始錄制 thend.start(); mmedio.start(); speak.setText("松開(kāi)停止錄音"); viocedomio.showRecordingDialog(); //顯示錄音的大小 final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { viocedomio.ChangeRecordingDialog(Double.parseDouble(msg.obj.toString())); } }; new Thread(new Runnable() { //啟動(dòng)線程根據(jù)改變錄音顯示大小 @Override public void run() { // TODO Auto-generated method stub while(mmedio!=null) { double ratio = (double)mmedio.getMaxAmplitude() ; double db = 0;// 分貝 if (ratio > 1) db = 20 * Math.log10(ratio); // Log.d(TAG,分貝值:+db); // mHandler.postDelayed(mUpdateMicStatusTimer, SPACE); Message msg=new Message(); msg.obj=db; mHandler.sendMessage(msg); } } }).start(); }catch(Exception e) { e.printStackTrace(); } } if(event.getAction()==MotionEvent.ACTION_UP) { //如果是松開(kāi) if(soundfile != null && soundfile.exists()) { //停止錄音 try { mmedio.setOnErrorListener(null); mmedio.setOnInfoListener(null); mmedio.setPreviewDisplay(null); mmedio.stop(); thend.interrupt(); //timetask.cancel(); }catch(Exception e) { Log.i("Exception", Log.getStackTraceString(e)); } mmedio.release(); mmedio=null; speak.setText("按住請(qǐng)講話?。?!"); String content=""; if(content.isEmpty()) { viocedomio.HideRecordingDialog(); //隱藏錄音標(biāo)志 Msg msg=new Msg(content,Msg.TYPE_SENT,Msg.TYPE_SENT_VOICE,Integer.toString(time_int),file_path); msg.setChattype(0); msglist.add(msg); adapter.notifyDataSetChanged(); //當(dāng)有新消息時(shí),刷新listview中的顯示 msgListView.setSelection(msglist.size()-1); //將listview定位到最后一行 } } } return true; } });
感謝各位的閱讀!關(guān)于“Android如何實(shí)現(xiàn)點(diǎn)擊持續(xù)錄音,松開(kāi)結(jié)束錄音并實(shí)現(xiàn)隨著分貝的大小改變圖片”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。