使用SeekBar调节声音

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

SeekBar常用属性:

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

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

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

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

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

1.XML代码:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="SeekBar声音控制" /> <SeekBar
android:id="@+id/seekbar"
android:layout_width="620px"
android:layout_height="wrap_content"
android:max="100"
android:progress="20"
android:progressDrawable="@drawable/soundbar"
android:thumb="@drawable/soundbutton" /> <TextView
android:id="@+id/txtProgress"
android:layout_width="fill_parent"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btnStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="播放" >
</Button> </LinearLayout>

2.java代码:

 package com.example.seekbar;

 import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener,
OnSeekBarChangeListener {
// 定义一个SeekBar和一个TextView
private SeekBar seekBar;
private TextView textView;
private Button btn;
private MediaPlayer mMediaPlayer; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); /** 创建MediaPlayer对象 **/
mMediaPlayer = new MediaPlayer();
initView();
} // 初始化
private void initView() {
textView = (TextView) findViewById(R.id.txtProgress);
seekBar = (SeekBar) findViewById(R.id.seekbar);
btn = (Button) findViewById(R.id.btnStart);
seekBar.setMax(100);
seekBar.setOnSeekBarChangeListener(this);
btn.setOnClickListener(this);
} private void play() throws IOException {
// 获取文件路径 ,放在SD卡下
File audioFile = new File(Environment.getExternalStorageDirectory(),
"welcome.wav");
Log.i("PATH", audioFile.getAbsolutePath());
mMediaPlayer.reset();
mMediaPlayer.setDataSource(audioFile.getAbsolutePath());
mMediaPlayer.prepare();
mMediaPlayer.start();
mMediaPlayer.setVolume(1f, 2f);
} @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
|| keyCode == KeyEvent.KEYCODE_1) {
AudioManager audioMa = (AudioManager) MainActivity.this
.getSystemService(Context.AUDIO_SERVICE);
audioMa.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER,
AudioManager.FX_FOCUS_NAVIGATION_UP);
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP
|| keyCode == KeyEvent.KEYCODE_2) {
AudioManager audioMa = (AudioManager) MainActivity.this
.getSystemService(Context.AUDIO_SERVICE);
audioMa.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE,
AudioManager.FX_FOCUS_NAVIGATION_UP);
}
return true;
} @Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
int i = seekBar.getProgress();
textView.setText("" + i); } @Override
public void onStartTrackingTouch(SeekBar arg0) {
// TODO Auto-generated method stub } @Override
public void onStopTrackingTouch(SeekBar arg0) {
int i = seekBar.getProgress();
mMediaPlayer.setVolume(i / 100f, i / 100f); } @Override
public void onClick(View v) {
if (v.getId() == R.id.btnStart) {
try {
mMediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
try {
// 播放音效
if (!mMediaPlayer.isPlaying()) {
play();
} else {
mMediaPlayer.stop();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

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. C艹复合类型(字符串)

    在C艹中有两种字符串形式, 一种是C-风格, 另一种是C艹风格的 初始化: char str[10] = {'a', 'c', 'd', '\0'};char str[20]= “aaa”; stri ...

  2. Simsimi 小黄鸡机器人最新无限制接口api simsimi机器人接口api 微信公众号

    一.什么是Simsimi? simsimi公司是提供智能服务,其中一个服务是simsimi聊天机器人服务,每天有超过百万的用户聊天,国内最大的搜索引擎——百度的产品siri使用的就是simsimi提供 ...

  3. 【C#】自定义容器控件,设置界面控件,支持设计器拖入控件

    先上效果图: 1.先重写设置界面的控件功能: public partial class SetterControl : UserControl { public SetterControl() { I ...

  4. Linq“条件排序”

    StockQuantities.OrderBy(u=>u.Status==null) 该排序先排结果为0(false)的,再排结果为1(true)的 使用场景: 一个对象有上传时间(可以为空)和 ...

  5. python_django_sae入口配置

    --index.wsgi import sys import os.path os.environ['DJANGO_SETTINGS_MODULE'] = 'APPNAME.settings' sys ...

  6. WebSphere异常:Servlet has become temporarily unavailable for service

    今天发现WebSphere中的一个应用图片看不见了,单独在浏览器中访问图片的路径http://ip地址:9080/应用/--/images/top.jpg,也不显示图片,并且提示异常Servlet h ...

  7. Java多线程(九)之ReentrantLock与Condition

    一.ReentrantLock 类   1.1 什么是reentrantlock   java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 ...

  8. java mysql 链接高版本出现SSL验证

    key1: String url="jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8 ...

  9. Linq 查询某个字段为null的数据

    如tb_flag 数据结构如下:flag int null 不能使用:flag==null 生成的SQL语句为 where flag=null   建议使用:可空类型 用Nullable<T&g ...

  10. 【Ubuntu】boot空间不足

    http://www.linuxidc.com/Linux/2015-05/117401.htm http://www.xitongzhijia.net/xtjc/20150327/43160.htm ...