}
};
(8)编写保存对话框所需要的布局文件,名称为save.xml,在该文件中,添加一个垂直线性布局管理器,并在该布局管理器中添加一个水平线性布局管理器(用于添加输入相片名称的文本框和编辑框)和一个ImageView组件(用于显示相片预览),具体代码请参见光盘。
(9)编写实现重新预览的方法resetCamera(),在该方法中,当isPreview变量的值为真时,调用相机的startPreview()方法开启预览,具体代码如下:
private void resetCamera(){
if(isPreview){
camera.startPreview(); //开启预览
}
}
(10)重写Activity的onPause()方法,用于当暂停Activity时,停止预览并释放相机资源,具体代码如下:
@Override
protected void onPause() {
if(camera!=null){
camera.stopPreview(); //停止预览
camera.release(); //释放资源
}
super.onPause();
}
(11)由于本程序需要访问SD卡和控制相机,所以需要在AndroidManifest.xml文件中赋予程序访问SD卡和控制相机的权限,关键代码如下:
运行本实例后,单击“预览”按钮,在屏幕的右侧将显示如图10.7所示的相机预览画面,单击“拍照”按钮,即可进行拍照,并显示保存图片对话框,输入文件名(不包括扩展名),如图10.8所示,单击“保存”按钮,即可将所拍的画面保存到SD卡的pictures目录中。
图10.7 相机预览画面
图10.8 保存图片对话框
10.3 经典范例
10.3.1 为游戏界面添加背景音乐和按键音
例10.8 在Eclipse中创建Android项目,名称为10.8,实现为游戏界面添加背景音乐和按键音。(实例位置:光盘\TM\sl\10\10.8)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的布局代码删除,然后添加一个FrameLayout帧布局管理器,并在该布局管理器中添加一个ImageView组件,用于显示小兔子图像,另外,还需要为添加的帧布局管理器设置背景图片,具体代码请参见光盘。
(2)打开默认添加的MainActivity,在该类中,创建程序中所需的成员变量,具体代码如下:
private SoundPool soundpool; //声明一个SoundPool对象
private HashMap
private ImageView rabbit;
private int x=0; //兔子在X轴的位置
private int y=0; //兔子在Y轴的位置
private int width=0; //屏幕的宽度
private int height=0; //屏幕的高度
(3)在onCreate()方法中,首先实例化SoundPool对象,并将要播放的全部音频流保存到HashMap对象中,然后获取布局管理器中添加的小兔子,并获取屏幕的宽度和高度,再计算小兔子在X轴和Y轴的位置,最后通过setX()和setY()方法设置兔子的默认位置,具体代码如下:
soundpool = new SoundPool(5,
AudioManager.STREAM_SYSTEM, 0); //创建一个SoundPool对象,该对象可以容纳5个音频流
//将要播放的音频流保存到HashMap对象中
soundmap.put(1, soundpool.load(this, R.raw.chimes, 1));
soundmap.put(2, soundpool.load(this, R.raw.enter, 1));
soundmap.put(3, soundpool.load(this, R.raw.notify, 1));
soundmap.put(4, soundpool.load(this, R.raw.ringout, 1));
soundmap.put(5, soundpool.load(this, R.raw.ding, 1));
rabbit=(ImageView)findViewById(R.id.rabbit);
width= MainActivity.this.getResources().getDisplayMetrics().widthPixels;
height=MainActivity.this.getResources().getDisplayMetrics().heightPixels;
x=width/2-44; //计算兔子在X轴的位置
y=height/2-35; //计算兔子在Y轴的位置
rabbit.setX(x); //设置兔子在X轴的位置
rabbit.setY(y); //设置兔子在Y轴的位置
(4)重写键盘的按键被按下的onKeyDown()方法,在该方法中,应用switch()语句分别为上、下、左、右方向键和其他按键指定不同的按键音,同时,在按下上、下、左和右方向键时,还会控制小兔子在相应方向上移动,具体代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode){
case KeyEvent.KEYCODE_DPAD_LEFT: //向左方向键
soundpool.play(soundmap.get(1), 1, 1, 0, 0, 1); //播放指定的音频
if(x>0){