2013-02-08 3 views
0

Я пытаюсь изменить изображение каждый раз, когда звук заканчивается, поэтому я использовал runOnUIThread, но изображение просто показывает мне последнее изображение, когда цикл, пока я помещал, чтобы изменить изображения закончите и под кодом.Как я могу изменить ImageView с runOnUiThread

public class PrincipalActivity extends ClassePai { 

MediaPlayer avemarias,misterios; 
ImageView imagem ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_principal); 

    avemarias = MediaPlayer.create(this, R.raw.teste); 

    imagem = (ImageView) findViewById(id.imageViewGoz); 



    while(contador<3){ 

     mudaImagem(imagem,avemarias,misterios); 

    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_principal, menu); 
    return true; 
} 

}

public class ClassePai extends Activity { 
protected static int contador = 0; 

protected void mudaImagem(final ImageView imagem, 
     final MediaPlayer avemaria, final MediaPlayer misterios) { 

    runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 


       if(contador >= 0){ 

        avemaria.start(); 
       }else if (contador == 11){ 

        misterios.start(); 
       }else if (contador == 21){ 
        misterios.start(); 
       } 



       if (avemaria.isPlaying()||misterios.isPlaying()) { 

        imagem.setImageResource(com.willamydotcom.osantoterco.R.drawable.goz_quar+contador); 



       while (avemaria.isPlaying()) { 

       } 
        contador++; 


       } 


     } 
    }); 

} 

}

+1

С вашим кодом так много неясно, с чего начать. Вы не должны зацикливаться внутри onCreate(); методы активности вызываются из потока пользовательского интерфейса, поэтому вам не нужно использовать runOnUiThread() - он используется, когда отдельный поток хочет обновить ui - если вы хотите, чтобы в будущем произошли какие-то события, есть другие способы делать это; почему contador объявлен статичным? – Clyde

ответ

1

Это не будет работать:

imagem.setImageResource(
     com.willamydotcom.osantoterco.R.drawable.goz_quar + contador); 

Вы пытаетесь изменить ресурс изображения в ImageView, но ты путаешь имя ресурса, с которым в вашем коде на самом деле является идентификатор ресурса.

Посмотрите на свой Logcat: Android не может найти эти ресурсы, и вы, вероятно, получите сбой со стеком.

Вы должны написать заявление переключатель, чтобы правильно обращаться с этим:

switch(contador) { 
case 0: 
    imagem.setImageResource(
      com.willamydotcom.osantoterco.R.drawable.goz_quar0); 
    break; 
case 1: 
    imagem.setImageResource(
      com.willamydotcom.osantoterco.R.drawable.goz_quar1); 
    break; 
case 2: 
    imagem.setImageResource(
      com.willamydotcom.osantoterco.R.drawable.goz_quar2); 
    break; 
} 

Есть и другие проблемы, связанные с вашим кодом: исполняющие mudaImagem() из onCreate(), только затем выполнить runOnUiThread() не имеет никакой цели.

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