单击按钮时播放声音的最有效方法

Bro*_*ide 8 audio android button

现在我有两个按钮.每个人都需要产生不同的声音.在未来,可能会有大约8个按钮,但现在只有两个.

public class MyActivity extends Activity {
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            final Button btnDrum1 = (Button) findViewById(R.id.btnDrum1);
            btnDrum1.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                     MediaPlayer mp = MediaPlayer.create(this, R.raw.drum1);
                        mp.start();
                        mp.release();
                }
            });

            final Button btnCym1 = (Button) findViewById(R.id.btnCym1);
            btnCym1.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                     MediaPlayer mp = MediaPlayer.create(this, R.raw.cym1);
                            mp.start();
                            mp.release();
                }
            });

        }
    }
Run Code Online (Sandbox Code Playgroud)

最初我没有mp.release(),它会正常播放声音,但最终应用程序会因内存不足而崩溃.现在使用mp.release()它不会崩溃,但有时它在点击时不会播放声音.

这是点击按钮时播放声音最有效的方法吗?它是可扩展的吗?

pgs*_*rom 5

我认为这是因为你在播放时释放它.为每个声音制作一个全局MediaPlayer并反复使用它,在活动关闭时释放(甚至可能在暂停时释放,如果声音文件很大则重新加载).此外,由于您将拥有许多按钮,因此您可以在onCreate()上实例化的所有按钮上都有一个onclicklistener:

private class MyMagicalOnClickListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.button1:
            //play sound 1
            break;
        case R.id.button2:
            //play sound 2
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只是评论并告诉我你是否不确定如何实现这个:)

编辑:每个请求,这是一个整洁的实现,应该与您的应用程序工作奇迹.我做了它,所以活动实现了onclicklistener,我认为它更干净.

public class Bluarg extends Activity implements OnClickListener{

    MediaPlayer mp1;
    MediaPlayer mp2;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mp1 = MediaPlayer.create(this, R.raw.sound1);
        mp2 = MediaPlayer.create(this, R.raw.sound2);

        final Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);

        final Button button2 = (Button) findViewById(R.id.button2);
        button1.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.button1:
            mp1.start();
            break;
        case R.id.button2:
            mp2.start();
            break;
        }
    }

    @Override
    protected void onDestroy() {
        mp1.release();
        mp2.release();
        super.onDestroy();
    }
}
Run Code Online (Sandbox Code Playgroud)