如何在程序中多次动态更改ImageView的源图像?

3
一旦图像被按下,它会发生变化并播放声音。 声音播放完毕后,我期望返回到之前的图像(同一ImageView),但这并没有发生。
xml代码:
<ImageView
    android:id="@+id/imageView_red_off"
    android:src="@drawable/red_orig"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:adjustViewBounds="true"
    android:maxHeight="160dp"
    android:maxWidth="150dp"
    android:layout_gravity="top|left"
    android:paddingRight="40dp"
    android:paddingLeft="0dp"
    android:scaleType="fitCenter"
/>

Java代码:

public boolean onTouch(View view, MotionEvent event) {
.
.
.

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (colorRed > threshold)) {
            whatColor = "Red";
            imageRed.setImageResource(R.drawable.red);
        }
   .
   .
   .
   }

playSound(whatColor);
imageRed.setImageResource(R.drawable.red_orig);
.
.
.
}

在playsound方法中:

if ((color != "None")) {
    MediaPlayer mp = MediaPlayer.create(this, animal);
    mp.start();
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            mp.release();
        };
    });
}

谢谢。

使用线程或后台服务播放声音。 - Rahil Ali
@smb6 你在用什么播放声音?SoundPool吗? - MikeIsrael
@MikeIsrael,我正在使用Mediaplayer。 - smb6
使用处理程序添加延迟。 - Harin
@smb6,我认为Herry提交的答案可能是解决您问题的方案。 - MikeIsrael
1个回答

1

您应该像这样做。

假设图像设置了img1,一旦用户触摸您,您就可以更改其img。现在,当MediaPlayer完成播放时,您可以使用setOnCompletionListener。播放完成后,请使用imageview对象来更改图像,而不是在图像的OnTouch中执行此操作。

如下所示:

MediaPlayer mp = MediaPlayer.create(this, animal);
    mp.start();
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        public void onCompletion(MediaPlayer mp) {
            mp.release();
          if(img.getTag().equal("second")){
             //Then set first image here 
           }
        };
    });

这个解决方案可行。但我不确定我理解为什么,你能解释一下吗?谢谢。 - smb6
当您的imageView显示从xml文件应用的某些图像时,现在正如您在问题中所说,您希望仅在用户触摸它时更改图像,并且一旦文件播放完成,您才想要将其更改回先前的图像。因此,在您的触摸中,您正在播放声音,因此一旦播放完毕,就可以简单地将图像更改回来,因此我建议您使用setOnCompletionListener。希望现在清楚了。 - Herry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接