0

我尝试在很多地方搜索这个,但找不到答案。我正在制作一个带有一组带有字母的图像按钮的应用程序。我希望能够单击字母A,并听到声音文件A。如果单击字母B,我想听到声音文件B。到目前为止,我只有字母A和B,以及声音文件A和B。当我运行我的代码,我只能听到按钮 A 的声音,当我按下字母 B 时,什么也没有发生。这是我的代码:

    package com.android.nishad.learn.hindi;

    import android.app.Activity;
    import android.media.MediaPlayer;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.ImageButton;

    public class AlphabetActivity extends Activity implements OnClickListener {
       /** Called when the activity is first created. */
       MediaPlayer mp;

       @Override
       public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_alphabet);

          ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
          btn.setOnClickListener(this);

       }

       public void onClick(View v) {
          // TODO Auto-generated method stub

          mp = MediaPlayer.create(this, R.raw.lettera);
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
       }



       public void onCreate1(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_alphabet);

          ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
          btn2.setOnClickListener(this);

       }

       public void onClick1(View v) {
          // TODO Auto-generated method stub

          mp = MediaPlayer.create(this, R.raw.letterb);
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
       }
    };
4

4 回答 4

2

方法onCreate1onClick1是无用的,因为它们永远不会被调用。相反,您应该将所有初始化代码放入您的onCreate方法中:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_alphabet);

    findViewById(R.id.imageButton1).setOnClickListener(this);
    findViewById(R.id.imageButton2).setOnClickListener(this);

}

public void onClick(View v) {

    // TODO Auto-generated method stub
    int rawid = 0;
    switch(v.getId()) {
        case R.id.imageButton1: rawid = R.raw.lettera; break;
        case R.id.imageButton2: rawid = R.raw.letterb; break;

        defalt: return;    //do nothing if none of our buttons;
    }

    mp = MediaPlayer.create(this, rawid);
    mp.start();
    while (mp.isPlaying()) { 
        // do nothing 
    };
   mp.release();
}

但是请注意,这是一种非常低效的处理方式。相反,您应该拥有一个 MediaPlayer 实例,然后根据需要使用它来播放各种声音。每次按下按钮时都创建一个新的 MediaPlayer 是一种资源浪费。

于 2012-07-16T15:13:53.737 回答
0

尝试这个:

 public void onClick(View v) {

  switch(v.getId()){

  case R.id.R.id.imageButton1:
          mp = MediaPlayer.create(this, R.raw.lettera);
          break;

  case R.id.R.id.imageButton2:
          mp = MediaPlayer.create(this, R.raw.letterb);
          break;
  }
          mp.start();
          while (mp.isPlaying()) { 
             // do nothing 
          };
          mp.release();
}
于 2012-07-16T15:14:17.937 回答
0
package com.android.nishad.learn.hindi;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class AlphabetActivity extends Activity implements OnClickListener {
   /** Called when the activity is first created. */
   MediaPlayer mp;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_alphabet);

      ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
      btn.setOnClickListener(this);

      ImageButton btn2 = (ImageButton)findViewById(R.id.imageButton2);
      btn2.setOnClickListener(this);

   }

   public void onClick(View v) 
   {
       switch(v.getId()) 
       {
         case R.id.imageButton1:
             mp = MediaPlayer.create(this, R.raw.lettera);
             break;
         case R.id.imageButton2:
             mp = MediaPlayer.create(this, R.raw.letterb);
             break;
         default:
             return;
       }

      mp.start();
      while (mp.isPlaying()) { 
         // do nothing 
      }
      mp.release();
   }
}
于 2012-07-16T15:14:28.300 回答
0

首先,删除那些onCreate1()onClick1()方法。onClick()方法足以接收布局中所有按钮的点击事件。您可以使用该view.getId()方法执行此操作。对于播放声音,我建议使用SoundPool类,它有一个非常清晰的接口用于此类目的。希望这可以帮助。

于 2012-07-16T15:16:56.167 回答