SeekBar简介
就是拖动的进度条, 可以用来调节音量
基本使用
需要两张图片,一张是背景,一张是选中的]时候的样式,
还有一张图片,用来显示当前进度的指示图标
这些可用用图片,亦可以永drawable绘图
背景图片
volume_control_bg.xml
1 2 3 4 5 6 7 8 9 10
| <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/set_voice_bar_nor" /> <item android:id="@android:id/progress" android:drawable="@drawable/set_voice_bar_sel" /> </layer-list>
|
控制点volume_control_point.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="@color/white"/> <size android:width="15dp" android:height="15dp"/> <stroke android:color="@color/code_blue" android:width="2dp"/> </shape>
|
使用SeekBar
在布局文件中
1 2 3 4 5 6 7 8 9 10 11 12
| <SeekBar android:id="@+id/setting_volume_control_sb" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toLeftOf="@id/setting_loud_iv" android:thumb="@drawable/volume_control_point" android:thumbOffset="0dp" android:maxHeight="2dp" android:minHeight="2dp" android:progressDrawable="@drawable/volume_control_bg" />
|
thumb:指定控制点
progressDrawable:指定背景
maxHeight:指定图片最大高度
在代码中,不用任何操作,就可以看到该空间,并拖动了
控制音量
首先获取AudioManager,用来管理音量
1
| mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
|
获取最大音量和当前音量设置给seekbar
1 2 3 4
| int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);//获取媒体声音最大值 seekBar.setMax(maxVolume); int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); seekBar.setProgress(currentVolume);//设置当前进度
|
监听seekbar的拖动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if(fromUser){ //设置媒体音量 mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); seekBar.setProgress(currentVolume); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } });
|
监听系统音量变化
当系统音量改变时,会发送广播,因此需要定义广播接收器监听广播
1 2 3 4 5 6 7 8 9 10
| private class VolumeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")){ int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); seekBar.setProgress(currentVolume); } } }
|