2012-07-16 111 views
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(); 
     } 
    }; 
+2

你不能只是抛出'onCreate1()'方法在那里,并期望它的工作... – kcoppock 2012-07-16 15:11:16

回答

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(); 
    } 
} 
+0

谢谢,这帮了我很多! – GurpreetSingh 2012-07-16 15:20:12

+0

@GurpeetSingh没问题!如果你有什么特别的问题可以随意问我! – 2012-07-16 15:21:43

+0

嗯,'while(mp.isPlaying())'循环*不是一个好主意,很可能会导致你的应用程序停止响应。 – kcoppock 2012-07-16 15:25:47

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是浪费资源。

+0

谢谢,我看到你的观点是这是浪费资源,所以我现在只会创建一个mp。谢谢! – GurpreetSingh 2012-07-16 15:21:00

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(); 
} 
0

首先,去掉那些onCreate1()onClick1()方法。 onClick()方法足以接收布局中所有按钮的点击事件。您可以使用view.getId()方法执行此操作。并且为了播放声音,我建议使用SoundPool类,该类具有用于此目的的非常清晰的界面。希望这可以帮助。