按下ListView项目时播放声音

时间:2014-07-03 13:33:47

标签: android audio android-listview onclick playback

我刚刚开始进行android开发,所以请原谅,我也搜索过但我发现的任何东西都是初学友好的。

我想要实现的是当我按下listview上的某个项目时,会播放一个短的声音片段,这些片段可能只有2秒钟。到目前为止,这是我的代码,我已经按照教程创建了列表视图。

所以要清楚,它将是一个名单列表,当点击一个名字时,将播放声音。

NamesList.java

    package me.creativebla.names;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class NamesList extends ListActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // storing string resources into Array
        String[] names = getResources().getStringArray(R.array.names);

        // Binding resources Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_names_list, R.id.label, names));

        ListView lv = getListView();



            }
        };

列表数据可在list_data.xml中找到

<?xml version="1.0" encoding="utf-8"?> 
<resources>
         <string-array name="names">
            <item>Name 1</item>
            <item>Name 2</item>
            <item>Name 3</item>
         </string-array> 
</resources>

如果有人能帮助我,我会非常感激,一步一步告诉我需要做什么。感谢。

1 个答案:

答案 0 :(得分:1)

假设您有两个名为&#34; rock_sound&#34;的声音文件和&#34; disco_sound&#34;在 res / raw 文件夹中,listview会监听点击事件并根据点击的位置(列表中的名称)播放声音:

package me.creativebla.names;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class NamesList extends ListActivity {
    private SoundPool soundPool;
    private int soundID1;
    private int soundID2;
    private boolean soundLoaded;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.name_of_layout);
     // Set hardware buttons to control music
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        // storing string resources into Array
        String[] names = getResources().getStringArray(R.array.names);

        // Binding resources Array to ListAdapter
        this.setListAdapter(new ArrayAdapter<String>(this, R.layout.activity_names_list, R.id.label, names));

        ListView lv = getListView();

            // load the sound here
        soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); //first parameter restricts the number of sound effects can be played concurrently
        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
                if (sampleId == R.raw.rock_sound) {
                    soundLoaded = true;
                }
            }
        });
    soundID1 = soundPool.load(this, R.raw.rock_sound, 1);
    soundID2 = soundPool.load(this, R.raw.disco_sound, 1);

        }
    };

lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                //play sound based on item name clicked
                  switch(position){
                   case 0:
                   playSound(soundID1, 1.0f);
                      break;
                   case 1:
                   playSound(soundID2, 0.5f);
                      break;
                 }

            }
        });

//播放声音的方法。 volume是一个浮点值,范围为0.0(最低)1.0(最大值)

 private void playSound(int soundId, float volume) {
         if (soundLoaded)
        soundPool.play(soundId, volume, volume, 1, 0, 1f);
    }
}