seekbar.setProgress(progress); //设置拖动条的默认值为当前音量
final TextView tv=(TextView)findViewById(R.id.volume); //获取显示当前音量的TextView组件
tv.setText("当前音量:"+progress); //显示当前音量
//为拖动条组件添加OnSeekBarChangeListener监听器
seekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
tv.setText("当前音量:"+progress); //显示改变后的音量
am.setStreamVolume(AudioManager.STREAM_MUSIC,
progress, AudioManager.FLAG_PLAY_SOUND); //设置改变后的音量
}
});
说明: 在上面的代码中,首先获取音频管理器类的对象,并设置当前调整音量只是针对媒体音乐进行,然后获取拖动条,并设置其最大值获取其当前值,再获取显示当前音量的TextView组件,并设置其显示内容为当前音量,最后为拖动条组件添加OnSeekBarChangeListener监听器,在重写的onProgressChanged()方法中,显示改变后的音量,并将改变后音量设置到音频管理器上,用来改变音量的大小。
运行本实例,将显示一个带音量控制的音乐播放器,单击“播放”按钮、“暂停/继续”按钮和“停止”按钮,可以播放音乐、暂停/继续和停止音乐的播放;拖动音量控制拖动条上的滑块,可以调整音量的大小,并及时显示当前音量,如图10.6所示。
图10.6 带音量控制的音乐播放器
10.2 控制相机拍照
教学录像:光盘\TM\lx\10\控制相机拍照.exe
现在的手机和平板电脑一般都会提供相机功能,而且相机功能的应用越来越广泛。在Android中提供了专门用于处理相机相关事件的类,即android.hardware包中的Camera类。Camera类没有构造方法,可以通过其提供的open()方法打开相机。打开相机后,可以通过Camera.Parameters类处理相机的拍照参数。拍照参数设置完成后,可以调用startPreview()方法预览拍照画面,也可以调用takePicture()方法进行拍照。结束程序时,可以调用Camera类的stopPreview()方法结束预览,并调用release()方法释放相机资源。Camera类常用的方法如表10.3所示。
表10.3 Camera类常用的方法
方 法 描 述
getParameters() 用于获取相机参数
Camera.open() 用于打开相机
release() 用于释放相机资源
setParameters(Camera.Parameters params) 用于设置相机的拍照参数
setPreviewDisplay(SurfaceHolder holder) 用于为相机指定一个用来显示相机预览画面的SurfaceView
startPreview() 用于开始预览画面
takePicture(Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback jpeg) 用于进行拍照
stopPreview() 用于停止预览
下面通过一个具体的实例来说明控制相机拍照的具体过程。
例10.7 在Eclipse中创建Android项目,名称为10.7,实现控制相机拍照功能。(实例位置:光盘\TM\sl\10\10.7)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的TextView组件删除,并将默认添加的垂直线性布局管理器修改为水平线性布局管理器,然后在该布局管理器中添加一个垂直线性布局管理器(用于放置控制按钮)和一个SurfaceView组件(用于显示相机预览画面),再在这个垂直线性布局管理器中添加两个按钮:一个是“预览”按钮,id为preview;另一个是“拍照”按钮,id为takephoto。关键代码如下:
android:id="@+id/surfaceView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
(2)打开默认添加的MainActivity,在该类中,声明程序中所需的成员变量,具体代码如下:
private Camera camera; //相机对象
private boolean isPreview = false; //是否为预览模式
(3)设置程序为全屏运行。这里需要将下面的代码添加到onCreate()方法中默认添加的setContentView (R.layout.main);语句之前,否则不能应用全屏的效果。
requestWindowFeature(Window.FEATURE_NO_TITLE); //设置全屏显示
(4)在onCreate()方法中,首先判断是否安装SD卡,因为拍摄的图片需要保存到SD卡上,然后获取用于显示相机预览画面的SurfaceView组件,最后通过SurfaceView对象获取SurfaceHolder对象,并设置该SurfaceHolder不维护缓冲,具体代码如下:
/****************** 判断是否安装SD卡 *********************************/
if (!android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "请安装SD卡!", Toast.LENGTH_SHORT).show(); //弹出消息提示框显示提示信息
}
/******************************************************************/
SurfaceView sv = (SurfaceView) findViewById(R.id.surfaceView1); //获取SurfaceView组件,用于显示相机预览