Java 图像更改时添加声音

Java 图像更改时添加声音,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,这是我的尝试:当按下按钮时,会出现一个不同的随机图像(此部分工作)。我不能去工作的是我想做的另一件事。根据出现的图像将取决于播放的声音片段。i、 e.如果图像是一辆黑色汽车,将播放两个单独的文件;一个写黑色,另一个写汽车。非常感谢您的帮助。这是我的密码: public class Black extends Activity { ImageView imageView; MediaPlayer mp; int sound=525,sound1=525; pu

这是我的尝试:当按下按钮时,会出现一个不同的随机图像(此部分工作)。我不能去工作的是我想做的另一件事。根据出现的图像将取决于播放的声音片段。i、 e.如果图像是一辆黑色汽车,将播放两个单独的文件;一个写黑色,另一个写汽车。非常感谢您的帮助。这是我的密码:

public class Black extends Activity {
    ImageView imageView;
    MediaPlayer mp;

    int sound=525,sound1=525;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.black);
      Button Button1 = (Button) findViewById(R.id.button1);
      imageView= (ImageView)findViewById(R.id.image1);
      Button1.setOnClickListener( new OnClickListener(){
          public void onClick(View v){
           onClickImageView(v);
          }
      });
    }

   public void onClickImageView(View view) {

       int[] picture= {
        R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,
            R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
        Random r = new Random();
        int n=r.nextInt(7);
        imageView.setImageResource(picture[n]);

        switch (picture[n]) {
         case R.drawable.black: 
              sound = R.raw.sayblack;
              sound1 = R.raw.sayblack;
              break;

         case R.drawable.blackairplane: 
              sound = R.raw.sayblack;
              sound1= R.raw.sayairplane;
              break;

         case R.drawable.blackbear:
             sound = R.raw.sayblack;
             sound1 = R.raw.saybear;
             break;

         case R.drawable.blackcar: 
                  sound = R.raw.sayblack;
                  sound1= R.raw.saycar;
                  break;

         case R.drawable.blackcircle: 
              sound = R.raw.sayblack;
              sound1=R.raw.saycircle;
              break;

         case R.drawable.blackkite: 
              sound = R.raw.sayblack;
              sound1 = + R.raw.saykite;
              break;

         case R.drawable.blacksquare: 
              sound = R.raw.sayblack;
              sound1 =  R.raw.saysquare;
              break;

         case R.drawable.blacktriangle: 
              sound = R.raw.sayblack;
              sound1= R.raw.saytriangle;
              break;
        }

        if(mp!=null){
         mp.release();
        }
        if(sound!=0){
        mp = MediaPlayer.create(getBaseContext(), sound);
          mp.start();

        }


         mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){

         @Override
          public void onCompletion(MediaPlayer arg0) {
          // TODO Auto-generated method stub
           if(sound1!=0 && sound!=0){
           mp= MediaPlayer.create(getBaseContext(),sound1);
           mp.start();
           sound=sound1=525;
           }}
         });

        }
}
这是我的.xml文件:

   <Button
       android:id="@+id/button1"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="40dp"
       android:background="@color/white"
       android:text="@string/black" />

   <ImageView
        android:id="@+id/image1"
        android:layout_width="320dp"
        android:layout_height="250dp"
        android:scaleType="fitXY"
        android:contentDescription="@string/black" />


。。。这是正确的代码。

您有一个imageView,并且在交换机机箱中使用它的id。您的切换情况应该取决于您的图片,而不是您的ImageView id。

如果您有一个
ImageView
,则不能使用switch语句,因为您的
ImageView
具有唯一的id并且始终保持不变

使用以下代码

public class Black extends Activity {
     ImageView imageView;
     MediaPlayer mp;

     int sound=525,sound1=525;


     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         setContentView(R.layout.black);
       Button Button1 = (Button) findViewById(R.id.button1);
       imageView= (ImageView)findViewById(R.id.image1);
       Button1.setOnClickListner( new OnClickListener(){
           public void onClick(view v){
            onClickImageView(v);
           }
       });
     }

    public void onClickImageView(View view) {

        int[] picture= {
         R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
         Random r = new Random();
         int n=r.nextInt(7);
         imageView.setImageResource(picture[n]);

         switch (picture[n]) { //here is the change in code
          case R.drawable.black: 
               sound = R.raw.sayblack;
               break;

          case R.drawable.blackairplane: 
               sound = R.raw.sayblack ;
               sound1= R.raw.sayplane;
               break;

          case R.drawable.blackcar: 
                   sound = R.raw.sayblack;
                   sound1= R.raw.saycar;
                   break;

          case R.drawable.blackcircle: 
               sound = R.raw.sayblack ;
               sound1=R.raw.saycircle;
               break;

          case R.drawable.blackkite: 
               sound = R.raw.sayblack ;
               sound1 = + R.raw.saykite;
               break;

          case R.drawable.blacksquare: 
               sound = R.raw.sayblack ;
               sound1 =  R.raw.saysquare;
               break;

          case R.drawable.blacktriangle: 
               sound = R.raw.sayblack ;
               sound1= R.raw.saytriangle;
               break;
         }

         if(mp!=null){
          mp.release();
         }
         if(sound!=0){
         mp = MediaPlayer.create(getBaseContext(), sound);
           mp.start();

         }


          mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){

          @Override
           public void onCompletion(MediaPlayer arg0) {
           // TODO Auto-generated method stub
            if(sound1!=0 && sound!=0){
            mp= MediaPlayer.create(getBaseContext(),sound1);
            mp.start();
            sound=sound1=525;
            }}
          });

         }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
在URXML中更改按钮如下(从xml中删除onclick att,并在运行时用java代码动态执行),我可以在onclick of button视图中看到错误,现在这段代码肯定可以工作了

<Button
       android:id="@+id/button1"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="40dp"
       android:background="@color/white"
       android:text="@string/black" 
       />

这应该行得通

public class Black extends Activity {
    ImageView imageView;
    MediaPlayer mp;


    /* add this here */
    Context context;

    int sound=525,sound1=525;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.black);

      /* add this here */
      context = this;

      Button Button1 = (Button) findViewById(R.id.button1);
      imageView= (ImageView)findViewById(R.id.image1);
      Button1.setOnClickListener( new OnClickListener(){
          public void onClick(View v){
           onClickImageView(v);
          }
      });
    }

   public void onClickImageView(View view) {

       int[] picture= {
        R.drawable.black,R.drawable.blackairplane,R.drawable.blackbear,R.drawable.blackcar,R.drawable.blackcircle,
            R.drawable.blackkite,R.drawable.blacksquare,R.drawable.blacktriangle};
        Random r = new Random();
        int n=r.nextInt(7);
        imageView.setImageResource(picture[n]);

        switch (picture[n]) {
         case R.drawable.black: 
              sound = R.raw.sayblack;
              sound1 = R.raw.sayblack;
              break;

         case R.drawable.blackairplane: 
              sound = R.raw.sayblack;
              sound1= R.raw.sayairplane;
              break;

         case R.drawable.blackbear:
             sound = R.raw.sayblack;
             sound1 = R.raw.saybear;
             break;

         case R.drawable.blackcar: 
                  sound = R.raw.sayblack;
                  sound1= R.raw.saycar;
                  break;

         case R.drawable.blackcircle: 
              sound = R.raw.sayblack;
              sound1=R.raw.saycircle;
              break;

         case R.drawable.blackkite: 
              sound = R.raw.sayblack;
              sound1 = + R.raw.saykite;
              break;

         case R.drawable.blacksquare: 
              sound = R.raw.sayblack;
              sound1 =  R.raw.saysquare;
              break;

         case R.drawable.blacktriangle: 
              sound = R.raw.sayblack;
              sound1= R.raw.saytriangle;
              break;
        }

        //if still playing stop it 
        if( mp!=null && mp.isPlaying() ){

         mp.stop();
         mp.release();
         mp = null;

        }

         //play selected
          mp = MediaPlayer.create(context, sound);
          mp.start();




         mp.setOnCompletionListener (new MediaPlayer.OnCompletionListener(){

         @Override
          public void onCompletion(MediaPlayer arg0) {
          // TODO Auto-generated method stub



           if(sound1!=0 && sound!=0){
           mp= MediaPlayer.create(context,sound1);
           mp.start();
           sound=sound1=525;
           }}
         });

        }
}

您忘记在mp.start()之前添加if(mp!=null){mp.stop();},以防止重复的声音;)我做了你建议的改变。它仍然不起作用,我已经发布了日志文件。有什么想法吗?(因为我迷路了)出现错误:构造函数MediaPlayer(Context,int)未定义;参考以下行:mp=newmediaplayer(getBaseContext(),sound1);。我试图给它下定义,但没有被识别。我得到了同样的结果。我通过AVD和我的手机运行它,结果是一样的…每个图像的音频都是“黑色”的,你做的事情不是我用最新代码引起的,当我按下按钮时,应用程序再次停止。我已经更新了我的原始.java代码,以及带有错误的Logcat。谢谢你的帮助。我非常感激,因为我已经尽可能多地尝试和研究,试图为自己解决这个问题。