当图像变化时添加声音



这是我的尝试:当按钮按下一个不同的随机图像出现(这部分工作)。我不能做的是我希望它做的另一部分。取决于哪个图像出现将取决于哪个片段被播放。例如,如果图像是一辆黑色的汽车,将有2个独立的文件播放;一个是黑色,另一个是汽车。非常感谢任何帮助。下面是我的代码:

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" />

…这是正确的代码

使用以下代码

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;
    }
}

更改按钮如下在ur xml(从xml中删除onclick att,并在java代码运行时动态地做),我可以看到按钮视图的onclick错误,现在这段代码肯定会工作

<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,你在你的开关情况下使用它的id。你的切换案例应该取决于你的图片,而不是你的imageViews id。

如果你有一个ImageView,你不能使用switch语句,因为你的ImageView有唯一的id,总是保持不变。

应该可以了

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

最新更新