Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。显示录音大小的DIALO
千家信息网最后更新 2026年11月03日Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片
这篇文章给大家分享的是有关Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
显示录音大小的DIALOG实现
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) { //根据录音的分贝改变大小 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页面实现
主界面的试下
activoti.xml
MainActiovity.java实现
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) { //如果按钮处于按下状态 //录音 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{ //创建文件,准备录制 soundfile.createNewFile(); mmedio.prepare(); }catch(IllegalStateException e) { e.printStackTrace(); } //开始录制 thend.start(); mmedio.start(); speak.setText("松开停止录音"); viocedomio.showRecordingDialog(); //显示录音的大小 final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { viocedomio.ChangeRecordingDialog(Double.parseDouble(msg.obj.toString())); } }; new Thread(new Runnable() { //启动线程根据改变录音显示大小 @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) { //如果是松开 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("按住请讲话!!!"); String content=""; if(content.isEmpty()) { viocedomio.HideRecordingDialog(); //隐藏录音标志 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(); //当有新消息时,刷新listview中的显示 msgListView.setSelection(msglist.size()-1); //将listview定位到最后一行 } } } return true; } });
感谢各位的阅读!关于"Android如何实现点击持续录音,松开结束录音并实现随着分贝的大小改变图片"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
大小
图片
内容
更多
篇文章
不错
实用
一行
按钮
文件
文章
标志
消息
状态
界面
看吧
知识
线程
页面
准备
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
哈尔滨大商圈互联网科技有限公司
互联网科技金融
互联网科技视频
朗涯互联网科技
狮子座互联网科技有限公司
上海喔噻互联网科技
互联网科技缩写
互联网科技ppt模板
互联网高科技企业
温州喔噻互联网科技有限公司
乌鲁木齐新华智原互联网科技学校
南通创西澳互联网科技有限公司
广西科技产业互联网是什么
张家口科技产业互联网平台
平安好医生打造互联网科技医疗
恒生互联网科技趋势
网互联网络科技
伍佰万互联网科技是干嘛的
知域互联网科技有限公司官网
科技与互联网
互联网金融与金融科技
互联网科技网站
狮子座互联网科技培训
华中科技有哪些互联网大佬
互联网科技公司需要的职位
恒银科技与互联网金融
用友工业互联网科技发展
互联网科技股为什么大涨
每日互联网科技新闻