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

第125页




x-=10;



rabbit.setX(x);  //移动小兔子



}



break;



case  KeyEvent.KEYCODE_DPAD_RIGHT:  //向右方向键



soundpool.play(soundmap.get(2),  1,  1,  0,  0,  1);  //播放指定的音频



if(x


x+=10;



rabbit.setX(x);  //移动小兔子



}



break;



case  KeyEvent.KEYCODE_DPAD_UP:  //向上方向键



soundpool.play(soundmap.get(3),  1,  1,  0,  0,  1);  //播放指定的音频



if(y>0){



y-=10;



rabbit.setY(y);  //移动小兔子



}



break;



case  KeyEvent.KEYCODE_DPAD_DOWN:  //向下方向键



soundpool.play(soundmap.get(4),  1,  1,  0,  0,  1);  //播放指定的音频



if(y






y+=10;



rabbit.setY(y);  //移动小兔子



}



break;



default:



soundpool.play(soundmap.get(5),  1,  1,  0,  0,  1);  //播放默认按键音



}



return  super.onKeyDown(keyCode,  event);



}

(5)在res目录下,创建一个menu子目录,并在该目录中创建一个名称为setting.xml的菜单资源文件,在该文件中,添加一个控制是否播放背景音乐的多选菜单组,默认为选中状态,setting.xml文件具体代码如下:























(6)重写onCreateOptionsMenu()方法,应用步骤(5)中添加的菜单文件,创建一个选项菜单,并重写onOptionsItemSelected()方法,对菜单项的选取状态进行处理,主要用于根据菜单项的选取状态控制是否播放背景音乐。具体代码如下:

@Override



public  boolean  onCreateOptionsMenu(Menu  menu)  {



MenuInflater  inflater=new  MenuInflater(this);  //实例化一个MenuInflater对象



inflater.inflate(R.menu.setting,  menu);  //解析菜单文件



return  super.onCreateOptionsMenu(menu);



}



@Override



public  boolean  onOptionsItemSelected(MenuItem  item)  {



if(item.getGroupId()==R.id.setting){  //判断是否选择了参数设置菜单组



if(item.isChecked()){  //若菜单项已经被选中



item.setChecked(false);  //设置菜单项不被选中



Music.stop(this);



}else{



item.setChecked(true);  //设置菜单项被选中



Music.play(this,  R.raw.jasmine);



}



}



return  true;



}

(7)编写Music类,在该类中,首先声明一个MediaPlayer对象,然后编写用于播放背景音乐的play()方法,最后编写用于停止播放背景音乐的stop()方法,关键代码如下:

public  class  Music  {



private  static  MediaPlayer  mp  =  null;  //声明一个MediaPlayer对象



public  static  void  play(Context  context,  int  resource)  {



stop(context);



if  (  SettingsActivity.getBgSound(context)  )  {  //判断是否播放背景音乐



mp  =  MediaPlayer.create(context,  resource);



mp.setLooping(true);  //是否循环播放



mp.start();  //开始播放



}



}



public  static  void  stop(Context  context)  {



if  (mp  !=  null)  {



mp.stop();  //停止播放



mp.release();  //释放资源



mp  =  null;



}



}



}

说明:  在上面的代码中,加粗的代码SettingsActivity.getBgSound(context)用于获取选项菜单存储的首选值,这样可以实现通过选项菜单控制是否播放背景音乐。

(8)编写SettingsActivity类,该类继承PreferenceActivity类,用于实现自动存储首选项的值。在SettingsActivity类中,首先重写onCreate()方法,在该方法中调用addPreferencesFromResource()方法加载首选项资源文件,然后编写获取是否播放背景音乐的首选项的值的getBgSound()方法,在该方法中返回获取到的值,关键代码如下:

public  class  SettingsActivity  extends  PreferenceActivity  {



@Override



protected  void  onCreate(Bundle  savedInstanceState)  {





super.onCreate(savedInstanceState);



addPreferencesFromResource(R.xml.setting);



}



//获取是否播放背景音乐的首选项的值



public  static  boolean  getBgSound(Context  context){



return  PreferenceManager.getDefaultSharedPreferences(context)