1

我正在使用包含一些图像的网格视图。我想在单击 gridview 中的每个图像时添加声音效果。我在 res/raw 文件夹中添加了图像并添加了以下代码。

MediaPlayer mp;
gridView.setAdapter(new ImageAdapter(this));

gridView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView parent, View v,int position,long id) {
        if (position == 0) {
            mp = MediaPlayer.create(this, R.raw.ok);
            Toast.makeText(getBaseContext(),
                 "Shape Matched",
                 Toast.LENGTH_LONG).show();
            startActivity(new Intent("com.example.TestShapeActivity2"));
        } else {
            mp = MediaPlayer.create(this, R.raw.no);
            Toast.makeText(getBaseContext(),
                    "Please Try Again",
                    Toast.LENGTH_LONG).show();
            //startActivity(new Intent("com.example.TestShapeActivity2"));
        }
    }
});

但是创建函数给出了错误

The method create(Context, int) in the type MediaPlayer is not applicable for the arguments (new AdapterView.OnItemClickListener(){}, int).

请帮助我。谢谢。

4

2 回答 2

1

将两个调用更改为

mp = MediaPlayer.create(this, R.raw.ok);

mp = MediaPlayer.create(TestShapeActivity.this, R.raw.ok);

或者无论您参加的活动的名称是什么。

create()需要 aContext但是当您this在其中引用它时,OnItemClickListener它指的是侦听器,而不是活动。

在此处了解有关该this关键字的更多信息。

于 2013-06-26T07:00:24.807 回答
0

也许您应该使用 SoundPool,因为它听起来不那么滞后;首先声明您的 SoundPool:

     private SoundPool soundPool;
     private int sound1;

在 onCreate 中加载声音:第一个数字设置可以排队复制的声音数量。

    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    sound1 = soundPool.load(context, R.raw.msound, 1);

最后在您的 OnClick 中:

soundPool.play(sound1, 1, 1, 1, 0, 1);

最后一种方法是这样的:play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)这允许您设置它将复制的次数等。

更多信息

编辑:

grid.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> arg0, View v, int pos, long arg3) {
    soundPool.play(sound1, 1, 1, 1, 0, 1); 
    ...

项目点击也一样:

grid.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int pos,long arg3) {
    soundPool.play(soundPulsa, 1, 1, 1, 0, 1);
...
于 2013-06-26T07:39:29.910 回答