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

第124页





}



};

(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  soundmap  =  new  HashMap();  //创建一个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){