使用SeekBar调节声音

SeekBar控件其实就是一个高级点的进度条,就像我们在听歌,看电影用的播放器上的进度条一样,是可以拖动的,可以改变进度的一个进度条控件!

SeekBar常用属性:

android:max[integer]//设置拖动条的最大值

android:progress[integer]//设置当前的进度值

android:secondaryProgress[integer]//设置第二进度,通常用做显示视频等的缓冲效果

android:thumb[drawable]//设置滑块的图样

android:progressDrawable[drawable]//设置进度条的图样

1.XML代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6.  
  7. <TextView
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content"
  10. android:text="SeekBar声音控制" />
  11.  
  12. <SeekBar
  13. android:id="@+id/seekbar"
  14. android:layout_width="620px"
  15. android:layout_height="wrap_content"
  16. android:max="100"
  17. android:progress="20"
  18. android:progressDrawable="@drawable/soundbar"
  19. android:thumb="@drawable/soundbutton" />
  20.  
  21. <TextView
  22. android:id="@+id/txtProgress"
  23. android:layout_width="fill_parent"
  24. android:layout_height="wrap_content" />
  25.  
  26. <Button
  27. android:id="@+id/btnStart"
  28. android:layout_width="match_parent"
  29. android:layout_height="wrap_content"
  30. android:text="播放" >
  31. </Button>
  32.  
  33. </LinearLayout>

2.java代码:

  1. package com.example.seekbar;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import android.app.Activity;
  6. import android.content.Context;
  7. import android.media.AudioManager;
  8. import android.media.MediaPlayer;
  9. import android.os.Bundle;
  10. import android.os.Environment;
  11. import android.util.Log;
  12. import android.view.KeyEvent;
  13. import android.view.View;
  14. import android.view.View.OnClickListener;
  15. import android.widget.Button;
  16. import android.widget.SeekBar;
  17. import android.widget.SeekBar.OnSeekBarChangeListener;
  18. import android.widget.TextView;
  19.  
  20. public class MainActivity extends Activity implements OnClickListener,
  21. OnSeekBarChangeListener {
  22. // 定义一个SeekBar和一个TextView
  23. private SeekBar seekBar;
  24. private TextView textView;
  25. private Button btn;
  26. private MediaPlayer mMediaPlayer;
  27.  
  28. @Override
  29. public void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_main);
  32.  
  33. /** 创建MediaPlayer对象 **/
  34. mMediaPlayer = new MediaPlayer();
  35. initView();
  36. }
  37.  
  38. // 初始化
  39. private void initView() {
  40. textView = (TextView) findViewById(R.id.txtProgress);
  41. seekBar = (SeekBar) findViewById(R.id.seekbar);
  42. btn = (Button) findViewById(R.id.btnStart);
  43. seekBar.setMax(100);
  44. seekBar.setOnSeekBarChangeListener(this);
  45. btn.setOnClickListener(this);
  46. }
  47.  
  48. private void play() throws IOException {
  49. // 获取文件路径 ,放在SD卡下
  50. File audioFile = new File(Environment.getExternalStorageDirectory(),
  51. "welcome.wav");
  52. Log.i("PATH", audioFile.getAbsolutePath());
  53. mMediaPlayer.reset();
  54. mMediaPlayer.setDataSource(audioFile.getAbsolutePath());
  55. mMediaPlayer.prepare();
  56. mMediaPlayer.start();
  57. mMediaPlayer.setVolume(1f, 2f);
  58. }
  59.  
  60. @Override
  61. public boolean onKeyDown(int keyCode, KeyEvent event) {
  62. if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
  63. || keyCode == KeyEvent.KEYCODE_1) {
  64. AudioManager audioMa = (AudioManager) MainActivity.this
  65. .getSystemService(Context.AUDIO_SERVICE);
  66. audioMa.adjustStreamVolume(AudioManager.STREAM_MUSIC,
  67. AudioManager.ADJUST_LOWER,
  68. AudioManager.FX_FOCUS_NAVIGATION_UP);
  69. } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP
  70. || keyCode == KeyEvent.KEYCODE_2) {
  71. AudioManager audioMa = (AudioManager) MainActivity.this
  72. .getSystemService(Context.AUDIO_SERVICE);
  73. audioMa.adjustStreamVolume(AudioManager.STREAM_MUSIC,
  74. AudioManager.ADJUST_RAISE,
  75. AudioManager.FX_FOCUS_NAVIGATION_UP);
  76. }
  77. return true;
  78. }
  79.  
  80. @Override
  81. public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
  82. int i = seekBar.getProgress();
  83. textView.setText("" + i);
  84.  
  85. }
  86.  
  87. @Override
  88. public void onStartTrackingTouch(SeekBar arg0) {
  89. // TODO Auto-generated method stub
  90.  
  91. }
  92.  
  93. @Override
  94. public void onStopTrackingTouch(SeekBar arg0) {
  95. int i = seekBar.getProgress();
  96. mMediaPlayer.setVolume(i / 100f, i / 100f);
  97.  
  98. }
  99.  
  100. @Override
  101. public void onClick(View v) {
  102. if (v.getId() == R.id.btnStart) {
  103. try {
  104. mMediaPlayer.prepare();
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. }
  108. try {
  109. // 播放音效
  110. if (!mMediaPlayer.isPlaying()) {
  111. play();
  112. } else {
  113. mMediaPlayer.stop();
  114. }
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. }
  118. }
  119. }
  120. }

Android学习之SeekBar(控制wav音频的声音)的更多相关文章

  1. [Android学习笔记]SeekBar的使用

    一.SeekBar滑动条的使用 xml声明: <SeekBar android:id="@+id/seekbar" android:layout_width="20 ...

  2. Android学习:代码控制UI界面示例

    package allegro.test2; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; im ...

  3. Android 学习笔记多媒体技术之 AsyncTask+实现音频播放...

    PS:今天搞了一下如何实现音频播放...结果被坑了,看书上写的代码是挺简单的,但是有个函数就是死活没看懂,这真是受不了...最后才弄明白,原来是一个实现异步任务的一个类...这个类使用java.uti ...

  4. android学习SeekBar的使用

    SeekBar介绍听歌的时候,我们常常想快进或者快退到某一时间段,听歌的时候我们控制音量大小听歌,SeekBar可以通过滑块的位置来标示数值,而且拖动条允许用户拖动滑块来改变进度条的大小 SeekBa ...

  5. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  6. 【转】Pro Android学习笔记(二三):用户界面和控制(11):其他控件

    目录(?)[-] Chronometer计时器控件 倒计时CountDownTimer Switch控件 Space控件 其他控件 Android提供了很多控件,基本上都是view的扩展. Chron ...

  7. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

  8. 【转】 Pro Android学习笔记(十九):用户界面和控制(7):ListView

    目录(?)[-] 点击List的item触发 添加其他控件以及获取item数据 ListView控件以垂直布局方式显示子view.系统的android.app.ListActivity已经实现了一个只 ...

  9. 【转】Pro Android学习笔记(十三):用户界面和控制(1):UI开发

    目录(?)[-] UI开发 方式一通过XML文件 方式二通过代码 方式三XML代码 UI开发 先理清一些UI概念: view.widget.control:这三个名词其实没有什么区别,都是一个UI元素 ...

随机推荐

  1. Eclipse初次java开发问题总结-2

    今天对之前写的servlet程序做了个简单的性能测试发现了一些问题,经过解决这些问题没有再重现,有些问题自己确切知道原因,有的则不太确定. 1.配置文件读取问题 项目中使用.properties作为配 ...

  2. Linux入门教程:如何检查Linux系统的最后重启时间

    问题: 是否有一个命令可以快速地检查系统已经运行了多久? 也就是我怎么知道Linux系统最后的重启时间? 有许多方法来查询系统最后的重启时间. 方法一 第一种方法是使用last命令. $ last r ...

  3. 非常酷的jQuery/HTML5图片滑块特效 带弹性菜单

    新的一周刚刚开始,当我迷迷糊糊坐在办公桌前时,又不自主的去看了一些jQuery和HTML5的应用插件,今天我们来看一款非常酷的jQuery/HTML5图片滑块特效,这款插件的特点是图片上不错的弹性菜单 ...

  4. CSS3和jQuery实现的自定义美化Checkbox和Radiobox

    现在经常可以在网络上看到一些非常奇特的表单元素,例如Checkbox复选框和Radiobox单选框,浏览器默认的样式确实是太丑了,而且更让人蛋疼的是各个浏览器的样式还不统一,考虑到现在越来越多的用户使 ...

  5. js判断字符串是否json格式

    function isJSON(str) { if (typeof str == 'string') { try { var obj=JSON.parse(str); if(typeof obj == ...

  6. 关于xml里的encoding

    创建一个xml时 如果<?xml version="1.0"  encoding="GB2312" ?>更改encoding的值为UTF-8,保存后 ...

  7. spark LinearRegression 预测缺失字段的值

    最近在做金融科技建模的时候,字段里面很多缺少值得时候,模型对于新用户的预测会出现很大的不稳定,即PSI较大的情况. 虽然我们依据字段IV值得大小不断的在调整字段且开发新变量,但是很多IV值很大的字段直 ...

  8. SVN自动生成版本号信息

        在平时的多版本开发过程中,需要通过版本号来定位到源码版本,便于定位问题.常规工程实践是设置版本号为X.Y.Z.N,一般X表示主版本号,Y表示子版本号,我一般将Z设为0,N为本次提交的SVN版本 ...

  9. struts实现国际化

    上篇博客学习了Java国际化的一些基础知识,了解了这些知识之后,我们可以更好的过度到struts国际化. 本篇博客主要学习struts国际化的实现: 1.配置环境设置baseName. 在struts ...

  10. WWDC 2015大会到来了

    WWDC 2015大会到来了,观看到凌晨3点,困死了. 从现场直播视频可以看到: (1)iOS 9的新体验:Siri更智能.Search更全面.苹果支付更方便.Notes和News更新颖好用.地图应用 ...