Android SeekBar实现音量调节

SeekBar可以通过滑块的位置来标识数值----而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等。

SeekBar允许用户改变拖动条的滑块外观,改变滑块外观通常通过如下属性来指定:android:thumb: 指定一个Drawable对象,该对象将自定义滑块。

为了让程序能响应拖动条滑块位置的改变,程序可以考虑为它绑定一个OnSeekBarChangeListener监听器。

以下是一个使用SeekBar来调节系统音量的实例:

XML代码:

 <SeekBar
                android:id="@+id/sound"
                android:layout_width="150px"
                android:layout_height="10px"
                android:max="100"  //设置拖动条最大值
                android:progress="10"   //设置拖动条当前值
                android:progressDrawable="@layout/seekbar_style"  //拖动条样式
                android:thumb="@layout/thumb" />    //滑块样式

seekbar_style.xml:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">   

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="10dip" />
            <gradient android:startColor="#ffffffff"
                android:centerColor="#ff000000" android:endColor="#ff808A87"
                android:centerY="1" android:angle="270" />
        </shape>
    </item>   

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="10dip" />
                <gradient android:startColor="#ffffffff"
                    android:centerColor="#ffFFFF00" android:endColor="#ffAABD00"
                    android:centerY="1" android:angle="270" />
            </shape>
        </clip>
    </item>
</layer-list>    

thumb.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 按下状态 -->
    <item
        android:state_pressed="true"
        android:drawable="@drawable/thumb_normal"
        />      

    <!-- 普通无焦点状态 -->
    <item
        android:state_focused="false"
        android:state_pressed="false"
        android:drawable="@drawable/thumb_normal"
    />   

</selector>    

bacon_seekbar.xml:

<layer-list
  xmlns:android="http://schemas.android.com/apk/res/android"
>
  <item
    android:id="@+android:id/background"
    android:drawable="@drawable/thumb_normal" />
  <item
    android:id="@+android:id/SecondaryProgress"
    android:drawable="@drawable/thumb_normal" />
  <item
    android:id="@+android:id/progress"
    android:drawable="@drawable/thumb_normal" />
</layer-list>

JAVA代码:

public class PianoActivity extends Activity {
    /** Called when the activity is first created. */
     private ImageButton imageButton_white1;
    private MediaPlayer mediaPlayer01;
    public  AudioManager audiomanage;
    private TextView mVolume ;  //显示当前音量
     public  SeekBar soundBar;
     private int maxVolume, currentVolume;  

    private int volume=0;  //初始化声音

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mediaPlayer01 = new MediaPlayer();

        imageButton_white1=(ImageButton)findViewById(R.id.white1);
        final SeekBar soundBar=(SeekBar)findViewById(R.id.sound);  //音量设置
        mVolume = (TextView)findViewById(R.id.mVolume);
        audiomanage = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  

        maxVolume = audiomanage.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  //获取系统最大音量
        soundBar.setMax(maxVolume);   //拖动条最高值与系统最大声匹配
        currentVolume = audiomanage.getStreamVolume(AudioManager.STREAM_MUSIC);  //获取当前值
        soundBar.setProgress(currentVolume);
        mVolume.setText(currentVolume*100/maxVolume + " %");  

        soundBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() //调音监听器
        {
            public void onProgressChanged(SeekBar arg0,int progress,boolean fromUser)
            {
                audiomanage.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
                currentVolume = audiomanage.getStreamVolume(AudioManager.STREAM_MUSIC);  //获取当前值
                soundBar.setProgress(currentVolume);
                mVolume.setText(currentVolume*100/maxVolume + " %");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // TODO Auto-generated method stub

            }
        });

TextView的XML没有给出,需要自己添加。

完成效果:

时间: 2024-10-13 14:07:28

Android SeekBar实现音量调节的相关文章

Android 4.4 音量调节流程分析(二)

之前在Android 4.4 音量调节流程分析(一)里已经有简单的分析音量控制的流程,今天想接着继续分析下音量大小计算的方法.对于任一播放文件而言其本身都有着固定大小的音量Volume_Max,而在AudioPolicyManagerBase.cpp文件中音量调节可以理解为在Volume_Max的基础上乘以系数κ(0≤κ≤1). 现在对AudioPolicyManagerBase.cpp中volIndexToAmpl函数做具体分析,volIndexToAmpl的函数定义如下: 1 float A

Android 4.4 音量调节流程分析(一)

最近在做Android Audio方面的工作,有需求是在调节Volume_Up_Key & Volume_Down_key时,Spearker or Headset每音阶的衰减变为3db左右.所以利用Source Insight分析Android源码中音量控制的流程,如有错误,欢迎指正,谢谢! 以下是调节音量的流程: Step_1.首先在调节机台Volume_Up_Key & Volume_Down_Key操作时,系统会调用到AudioManager.java中handleKeyUp &a

Android 音量调节

对于Android的音量调节,可以分为按键调节音量和设置中调节音量.我们首先说一说设置中的音量调节. 一.音量的分类: 1.AudioManager.STREAM_VOICE_CALL 2.AudioManager.STREAM_RING 3.AudioManager.STREAM_MUSIC, 4.AudioManager.STREAM_ALARM 5.AudioManager.STREAM_NOTIFICATION 二.音量的范围: 对于不同类型的音量Android规定了不同的范围,在Aud

【Android】系统音量及屏幕亮度调节

屏幕亮度调节 /** * 滑动改变亮度,不需要权限 * * @param percent 亮度百分比,值为0.0----1.0 */ private void onBrightnessSlide(float percent) { if (mBrightness < 0) { // mBrightness是当前屏幕的亮度 mBrightness = getWindow().getAttributes().screenBrightness; if (mBrightness <= 0.00f) mB

Android 音量调节View

导语 手机直播一般都会通过移动屏幕来调节音量的大小,本篇只实现了图例,并不能改变音量. 先看效果: 需要的素材:小喇叭图片,点击这里获取 预热 如果你对Path,PathMeasure,RectF,Canvas等不适很了解的话,强烈建议看这位哥们的教程: 点击这里查看教程 如果你将这哥们的十几篇帖子都看完了的话,这个View实际上是非常简单的 步骤介绍 用动态图来介绍: 这里用文字翻译下: 将小喇叭画到中心位置 围绕着喇叭画一个圆圈,浅色的 画一个圆弧,深色的 根据触摸的位置来改变圆弧的大小 分

从零开始学android&lt;SeekBar滑动组件.二十二.&gt;

拖动条可以由用户自己进行手工的调节,例如:当用户需要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构如下所示: java.lang.Object ? android.view.View ? android.widget.ProgressBar ? android.widget.AbsSeekBar ? android.widget.SeekBar 常用方法 public SeekBar(Context context) 构造 创建SeekBar类的对象 publi

Android6.0 源码修改之Settings音量调节界面增加通话音量调节

前言 今天客户提了个需求,因为我们的设备在正常情况下无法调节通话音量,只有在打电话过程中,按物理音量加减键才能出现调节通话音量seekBar,很不方便,于是乎需求就来了.需要优化两个地方 1.在正常情况下,按物理音量加减键都显示 通话音量调节seekBar,可方便快速调节通话音量 2.在Settings中提示音界面点击设置进入,增加通话音量调节seekBar 修改前 修改后 实现 第一个功能 先来完成第一个功能,还是通过Hierarchy View查看布局结构,查找到布局文件id为volume_

android 控制手机音量的大小 切换声音的模式

(1)程序说明 在android API的AudioManager中,提供了调节手机音量的办法. audioMa.adjustVolume(AudioManager.ADJUST_LOWER, 0); audioMa.adjustVolume(AudioManager.ADJUST_RAISE, 0); 也可以调节手机声音的模式为震动或者静音 audioMa.setRingerMode(AudioManager.RINGER_MODE_NORMAL); audioMa.setRingerMode

自定义音量调节控件的实现

本篇文章,将介绍如何实现自定义的音量调节控件. 话不多少,先看效果图 本篇文章将介绍两种实现的方式,上面的是通过继承RatingBar,然后设置样式获得的效果,下面的是通过继承自View,完全自定义的方式实现. 我们首先介绍第一种方式,也就是继承自RatingBar实现. public class WmtRatingBar extends RatingBar { private OnRatingBarChanging mOnRatingBarChanging; public WmtRatingB