您的位置:首页 > 移动开发 > Android开发

(转)Android学习:SeekBar实现音量调节

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

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

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

 

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

XML代码:

[html] view
plaincopy

<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:

[html] view
plaincopy

<?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:

[html] view
plaincopy

<?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:

[html] view
plaincopy

<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代码:

[java] view
plaincopy

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没有给出,需要自己添加。

完成效果:

 


更多1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android