android:為你的app設定音效
阿新 • • 發佈:2018-12-29
最近在專案中碰到需要設定音效開關的需求。
關於音效開發的問題,都是建立在手機系統設定中,沒有靜音,且打開了選擇操作音的前提下。
1.系統自帶的點選聲音(通過設定View.playSoundEffect ()實現)
看原始碼請參考http://blog.csdn.net/jdsjlzx/article/details/17382455
在專案所以的Activity的抽象基類BaseActivity中複寫findViewById方法,通過配置檔案記錄音效開關
/** * 重寫findViewById()方法,設定控制元件是否有按鍵聲音 * */ @Override public View findViewById(int id) { // TODO Auto-generated method stub View v = super.findViewById(id); if (v != null) { if (mAppConfig.soundOn()) { v.setSoundEffectsEnabled(true); } else { v.setSoundEffectsEnabled(false); } } return v; }
playSoundEffect方法對包括TextView,Button,GridView的item點選,ListView等等控制元件在內都是適用的,這個可以根據View的原始碼看到,但是我在專案中碰到的例如RadioGroup,就只能通過以下程式碼實現點選切換時的音效了
另外,碰到GridView和ListView中item下繫結的控制元件,必須也得新增音效的設定了,這點不能忘記。(RadioGroup)rgTab.setOnCheckedChangeListener(onCheckedChangeListener); private OnCheckedChangeListener onCheckedChangeListener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(new AppConfig(MainActivity.this).soundOn()){ rgTab.setSoundEffectsEnabled(true); rgTab.playSoundEffect(SoundEffectConstants.CLICK);//按鍵音效 } switch(checkedId){ case R.id.rb_1: break; case R.id.rb_2: break; case R.id.rb_3: break; } } };
總結:建議在專案中儘量使用自定義的控制元件,這樣不必每處都修改了
2.通過SoundPool播放自定義音效
參考http://blog.csdn.net/qq435757399/article/details/8010015
裡面說的已經很詳細了,我之前的測試結果是,好像會先播放系統自帶的點選音效,再接著播放我們自定義的音效,應該可以通過在xml佈局中為控制元件新增android:soundEffectsEnabled="false"來避免吧
歡迎大家指出不當之處!!