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インスタンスを1つ作成し、それを使用して必要に応じてさまざまなサウンドを再生する必要があります。ボタンが押されるたびに新しい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 に答える