Android seekbar(自定义)控制音量同步更新

Android seekbar(自定义)控制音量同步更新,第1张

概述Androidseekbar控制音量同步更新 作为开发人员来讲,seekbar你一定会碰到,那么怎么自定义seekbar以及seekbar控制的音量怎么与系统的seekbar音量同步更新。今天就下拉菜单中添加SeekBar控制音量为例(Android5

AndroID seekbar控制音量同步更新

  作为开发人员来讲,seekbar你一定会碰到,那么怎么自定义seekbar以及seekbar控制的音量怎么与系统的seekbar音量同步更新。今天就下拉菜单中添加Seekbar控制音量为例(AndroID 5.1系统)

  一:自定义Seekbar

   先来看一下所自定义的效果图:

 

    

  首先来来看一下布局文件:

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:ID="@+ID/ringtone_seekbar_parent"   androID:layout_wIDth="match_parent"   androID:layout_height="160px"   androID:layout_margintop="0dip"   androID:layout_weight="1"   androID:gravity="center_vertical"   androID:orIEntation="horizontal" >    <ImageVIEw     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:layout_marginleft="25dip"     androID:background="@drawable/zf_notify_quicksetting_ringtone" />    <Seekbar     androID:ID="@+ID/ringtone_seekbar"     androID:layout_wIDth="fill_parent"     androID:layout_height="wrap_content"     androID:layout_marginRight="10dp"     androID:maxHeight="49px"     androID:minHeight="49px"     androID:paddingEnd="40dp"     androID:paddingStart="25dp"     androID:progress="60"     androID:progressDrawable="@drawable/zf_progress_horizontal"     androID:splitTrack="false"     androID:thumb="@drawable/zf_noti_scrubber_control_normal"     androID:thumbOffset="0px" />  </linearLayout> 

  这里面需要看一下androID:progressDrawable="@drawable/zf_progress_horizontal"   看一下 zf_progress_horizontal.xml文件有什么东西。

<?xml version="1.0" enCoding="utf-8"?>  <@R_573_3419@ xmlns:androID="http://schemas.androID.com/apk/res/androID">      <item androID:ID="@androID:ID/background" androID:drawable="@drawable/progress_gray"/>      <item androID:ID="@androID:ID/progress" androID:drawable="@drawable/progress_blue"/>    </@R_573_3419@> 

  这里面有两张图片 下图分别是这两张图片的效果  @drawable/progress_blue 和 @drawable/progress_gray

 


关于 thumb="@drawable/zf_noti_scrubber_control_normal" 这个是按压的按钮图片

  好了 布局代码就这些,剩下的就是实现控制音量的代码了。

  二:与系统seekbar音量同步更新

    1.首先看一下实现控制音量的代码

      打开下面路径下的代码

frameworks/base/packages/systemUI/src/com/androID/systemUI/statusbar/phone/Phonestatusbar.Java  在protected PhonestatusbarVIEw makeStatusbarVIEw() {}方法里面注册ID,然后在里面实现控制代码。

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUdio_SERVICE);//获取媒体系统服务 mVoiceSeekbar= (Seekbar) mStatusbarWindow.findVIEwByID(R.ID.ringtone_seekbar);//注册ID mVoiceSeekbar.setMax(15);//设置最大音量 mVoiceSeekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));// 当前的媒体音量 myRegisterReceiver();//注册同步更新的广播 Log.i("lyj_ring","mVoiceSeekbar max voluem = "+audioManager.getStreamMaxVolume(AudioManager.STREAM_SYstem)); mVoiceSeekbar.setonSeekbarchangelistener(new OnSeekbarchangelistener() {          public voID onStopTrackingtouch(Seekbar arg0) {     // Todo auto-generated method stub           }          public voID onStartTrackingtouch(Seekbar arg0) {     // Todo auto-generated method stub            } public voID onProgressChanged(Seekbar arg0,int arg1,boolean arg2) {       AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUdio_SERVICE);       Log.v("lyj_ring","mVoiceSeekbar max progress = "+arg1);       //系统音量和媒体音量同时更新       audioManager.setStreamVolume(AudioManager.STREAM_SYstem,arg1,0);       audioManager.setStreamVolume(3,0);// 3 代表 AudioManager.STREAM_MUSIC      }     }); mVoiceObserver = new ContentObserver(new Handler()) {      @OverrIDe      public voID onChange(boolean selfChange) {        // Todo auto-generated method stub        super.onChange(selfChange);        AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUdio_SERVICE);        mVoiceSeekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_SYstem));        //或者你也可以用媒体音量来监听改变,效果都是一样的。        //mVoiceSeekbar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));       }     }; 

    看代码可以发现,当seekbar改变的时候我这里处理的是 系统音量和媒体音量同时改变的。

AudioManager.STREAM_SYstem和AudioManager.STREAM_MUSIC。在监听状态变化时你也可以用媒体音量来监听变化。效果都是一样的。

    2.与系统seekbar控制音量同步更新

      主要就是监听音量改变是的广播,来看一下实现的代码:

 /**   * 注册当音量发生变化时接收的广播   */   private voID myRegisterReceiver(){   MyVolumeReceiver mVolumeReceiver = new MyVolumeReceiver() ;     IntentFilter filter = new IntentFilter() ;     filter.addAction("androID.media.VolUME_CHANGED_ACTION") ;     mContext.registerReceiver(mVolumeReceiver,filter) ;   }      /**   * 处理音量变化时的界面显示   * @author long   */   private class MyVolumeReceiver extends broadcastReceiver{     @OverrIDe     public voID onReceive(Context context,Intent intent) {       //如果音量发生变化则更改seekbar的位置       if(intent.getAction().equals("androID.media.VolUME_CHANGED_ACTION")){       AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUdio_SERVICE);         int currVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC) ;// 当前的媒体音量         mVoiceSeekbar.setProgress(currVolume) ;       }     }   } 

    这里面的myRegisterReceiver()方法在1中的代码中已经注册了,这样的话整个功能就实现了。这个过程下来感觉功能的实现很简单,关键是seekbar进度条要与系统的音量进度条实时更新,这个是关键。以上就是所有的控制代码。

感谢阅读,希望能帮助到大家,谢谢大家,对本站的支持!

总结

以上是内存溢出为你收集整理的Android seekbar(自定义)控制音量同步更新全部内容,希望文章能够帮你解决Android seekbar(自定义)控制音量同步更新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1147328.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存