我试图在每次声音完成时更改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++;
}
}
});
}
}
答案 0 :(得分: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()
才有目的。