万书网 > 文学作品 > Android从入门到精通 > 第122页

第122页





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组件,用于显示相机预览