首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在每个按钮上播放音频

在每个按钮上播放音频
EN

Stack Overflow用户
提问于 2015-02-01 09:46:45
回答 2查看 1.6K关注 0票数 1

我的项目有2个音频文件,'dog.mp3‘和'cat.mp3’,所以下面的代码允许我根据特定的列表视图项单击播放声音,但是如何修改代码以便实现以下目标?

  • 当'cat.mp3‘正在播放时,如果我点击'dog.mp3’的列表视图项,我希望'cat.mp3‘文件停止播放,而'dog.mp3’音频播放。
  • 当'dog.mp3‘正在播放时,如果我点击'cat.mp3’的列表视图项,我希望'dog.mp3‘文件停止播放,而'cat.mp3’音频播放。

所有的帮助都将不胜感激。

代码语言:javascript
复制
mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            if (position == 0) {
            mp = MediaPlayer.create(Test.this, R.raw.cat);   
            mp.start();
            }

            if (position == 1) {
            mp = MediaPlayer.create(Test.this, R.raw.dog);   
            mp.start();
            }
        }
    });

误差

代码语言:javascript
复制
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class MainActivity extends ActionBarActivity {

    ListView mainList;

    String[] listContent = {
            "chimes", "chord", "ding",
            "notify", "recycle", "ringin",
            "ringout", "tada"
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainList = (ListView)findViewById(R.id.main_listView);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,listContent);
        mainList.setAdapter(adapter);

        int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,
                R.raw.notify, R.raw.recycle, R.raw.ringin, R.raw.ringout, R.raw.tada };

        mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                playSong(position);

            }
        });


        public void playSong(int songIndex) {
            // Play song
            mp.reset();
            mp.setDataSource(resID[songIndex]);

            mp.start();
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mp.release();
                }
            });
        }
    }
}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-01 10:03:28

代码语言:javascript
复制
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    // variable declaration
    private ListView mainList;
    private MediaPlayer mp;
    private final String[] listContent = { "chimes", "chord", "ding", "notify",
            "recycle", "ringin", "ringout", "tada" };

    private final int[] resID = { R.raw.chimes, R.raw.chord, R.raw.ding,
            R.raw.notify, R.raw.recycle, R.raw.ringin, R.raw.ringout,
            R.raw.tada };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Initializing variables
        mp = new MediaPlayer();
        mainList = (ListView) findViewById(R.id.main_listView);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, listContent);
        mainList.setAdapter(adapter);

        mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view,
                    int position, long id) {
                playSong(position);

            }
        });

    }

    public void playSong(int songIndex) {
        // Play song
        mp.reset();// stops any current playing song
        mp = MediaPlayer.create(getApplicationContext(), resID[songIndex]);// create's
                                                                            // new
                                                                            // mediaplayer
                                                                            // with
                                                                            // song.
        // if you don't know what is getApplicationContext() here better use
        // MainActivity.this or yourclassname.this
        mp.start(); // starting mediaplayer
        // setting up what to do if current song completes.
        /*
         * mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
         * 
         * @Override public void onCompletion(MediaPlayer mp) { // TODO
         * Auto-generated method stub
         * 
         * } });
         */
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mp.release();
    }
}
票数 1
EN

Stack Overflow用户

发布于 2015-02-01 10:01:37

您可能应该为此使用一个SoundPoolhttp://developer.android.com/reference/android/media/SoundPool.html

您可以加载onCreate中的所有音频,并将maxStreams设置为1,以便一次只播放一个声音。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28261425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档