2013-04-28 2 views
0

Это моя попытка: при нажатии кнопки появляется другое случайное изображение (эта часть работает). То, что я не могу получить, - это другая часть, которую я бы хотел сделать. В зависимости от того, какое изображение будет отображаться, будет зависеть от того, какой звук будет воспроизводиться. т. е. если изображение является черным автомобилем, есть два отдельных файла, которые будут воспроизводиться; один, который говорит черный, а другой скажет автомобиль. Любая помощь приветствуется. Вот мой код:Добавить звук при изменении изображения

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

... и это правильный код.

ответ

1

использовать следующий код кнопки изменения

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

следующим образом в Уре XML (REMOVE OnClick ATT из XML и сделать это динамически во время выполнения в 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" 
     /> 
+0

вы забыли добавить, если (tпл! = NULL) {т p.stop();} перед mp.start(), чтобы предотвратить дублирование звуков;) –

+0

thnks для внесения изменений –

+0

Я внес изменения, которые вы предложили. Он все еще не работает, и я опубликовал файл Logcat. Есть идеи? (потому что я потерян) – jsollo2

0

У вас есть один образ, и вы используете его идентификатор в своих корпусах коммутаторов. Ваши случаи переключения должны быть зависеть от ваших изображений, а не от вашего изображения.

0

Если у вас есть один ImageView, вы не можете использовать оператор switch, потому что ваш ImageView имеет уникальный идентификатор и всегда остается прежним.

0

Это должно работать

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

     } 
} 
Смежные вопросы