BeatBox

2017-05-26  本文已影响0人  嗯_4bce

一、.Assets的使用

可加载不同类型的文件,不会像Android的资源管理系统一样一个一个去处理,效率低下,所以才用Assets来加载不同类型的声音。

1.导入文件到assets中
导入下载好的声音文件
2.处理assets
public class BeatBox {
    private static final String TAG ="BeatBox";

    private static final String SOUNDS_FOLDER = "sample_sounds";

    private AssetManager mAssets;

    public BeatBox(Context context){
        mAssets = context.getAssets();
        loadSounds();
    }
}
3.使用assets
public class Sound {
    private String mAssetPath;
    private String mName;
    private Integer mSoundId;

    public Sound(String assetPath){
        mAssetPath = assetPath;
        String[] components = assetPath.split("/");
        String filename = components[components.length - 1];
        mName =filename.replace(".ogg","");
    }

    public String getAssetPath(){
        return mAssetPath;
    }

    public String getName(){
        return mName;
    }

    public Integer getSoundId(){
        return mSoundId;
    }

    public void setSoundId(Integer soundId){
        mSoundId = soundId;
    }
}

二、使用SoundPool播放音频

SoundPool能加载一批声音资源到内存中,并支持同时播放多个音频文件

1.创建SoundPool
mSoundPool = new SoundPool(MAX_SOUNDS, AudioManager.STREAM_MUSIC,0);
2.加载音频文件
private void load(Sound sound) throws  IOException{
        AssetFileDescriptor afd = mAssets.openFd(sound.getAssetPath());
        int soundId = mSoundPool.load(afd,1);
        sound.setSoundId(soundId);
    }
3.播放音频
public void play(Sound sound){
        Integer soundId = sound.getSoundId();
        if (soundId == null){
            return;
        }
        mSoundPool.play(soundId,1.0f,1.0f,1,0,1.0f);
    }
4.释放音频
@Override
    public void onDestroy(){
        super.onDestroy();
        mBeatBox.release();
    }

三、样式与主题

1.样式
<style name="BeatBoxButton" parent="android:style/Widget.Holo.Button">
        <item name="android:background">@drawable/button_beat_box</item>
</style>
2.主题
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".BeatBoxActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

四、按钮优化

1.圆形按钮
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="@color/dark_bule"/>
</shape>
2.按下按钮的效果
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/button_beat_box_pressed"
          android:state_pressed="true"/>
    <item android:drawable="@drawable/button_beat_box_normal"/>
</selector>

最终程序运行效果

打开程序效果 按下按钮后的效果
上一篇下一篇

猜你喜欢

热点阅读