0

サウンドが終了するたびにイメージビューを変更しようとしているので、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++;


                }


        }
    });

}

}

4

1 に答える 1

1

これは機能しません:

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

ImageViewの画像リソースを変更しようとしていますが、リソース名とコード内の実際のリソースのIDを混同しています。

Logcatを見てください。Androidはこれらのリソースを見つけることができず、スタックトレースでクラッシュする可能性があります。

これを正しく処理するには、switchステートメントを作成する必要があります。

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()目的はありません。

于 2013-02-08T22:24:18.317 に答える