简体   繁体   English

在两个ImageButton中完成播放声音后将暂停图标更改为播放图标

[英]To change pause icon to play icon when the sound finish playing in two ImageButtons

I am trying to change the pause icon to play icon when the sound finish playing. 我试图在声音播放完毕后将暂停图标更改为播放图标。 Here, there are two ImageButtons, the second ImageButton works fine changing the pause icon to play when the sound finish playing but the first button wouldn't change back to play icon when the sound finish playing. 这里,有两个ImageButton,第二个ImageButton可以很好地将暂停图标更改为在声音播放完毕时播放,但第一个按钮不会更改为播放完声音后的播放图标。

public class MainActivity extends AppCompatActivity {


    ImageButton playBtn, playbutton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        playBtn = (ImageButton) findViewById(R.id.button1);
        playbutton= (ImageButton) findViewById(R.id.button2);

        final MediaPlayer sound = MediaPlayer.create(this,R.raw.evumm);

        playBtn.setBackgroundResource(R.drawable.playicon);
        playBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (sound.isPlaying()) {
                    sound.pause();
                    playBtn.setBackgroundResource(R.drawable.playicon);
                } else {

                    sound.start();
                    playBtn.setBackgroundResource(R.drawable.pauseicon);
                }
            }

        });

        sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                playBtn.setBackgroundResource(R.drawable.playicon);
            }
        });


        playbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (sound.isPlaying()) {
                    sound.pause();
                    playbutton.setBackgroundResource(R.drawable.playicon);
                } else {

                    sound.start();
                    playbutton.setBackgroundResource(R.drawable.pauseicon);
                }

            }
        });

        sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                playbutton.setBackgroundResource(R.drawable.playicon);
            }
        });


    }
}

Here is the XML side 这是XML方面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="develop.kokoson.playorstopapp.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Play or Pause !"
        android:textSize="25dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="46dp"
        android:id="@+id/textView" />

    <ImageButton
        android:id="@+id/button1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/playicon"
        android:layout_marginTop="81dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />

    <ImageButton
        android:id="@+id/button2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/playicon"
        android:layout_centerVertical="true"
        android:layout_alignLeft="@+id/button1"
        android:layout_alignStart="@+id/button1" />

   </RelativeLayout>

Because one instance of MediaPlayer class only have one OnCompletionListener listener, so when you call 因为MediaPlayer类的一个实例只有一个OnCompletionListener侦听器,所以当您调用

sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        playBtn.setBackgroundResource(R.drawable.playicon);
    }
});

it will register a new listener which set icon of the playBtn button. 它将注册一个新的侦听器,该侦听器设置了playBtn按钮的图标。 After that you call 之后,您致电

sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        playbutton.setBackgroundResource(R.drawable.playicon);
    }
});

it will set a new listener which set icon of the playbutton button and override the first listener. 它将设置一个新的侦听器,该侦听器设置playbutton按钮按钮的图标并覆盖第一个侦听器。 That why the code in first listener do not executed and the icon of the playBtn do not changed as well. 这就是为什么第一侦听器中的代码未执行以及playBtn的图标也未更改的原因。

You should use one listener and put all code you want to execute inside. 您应该使用一个侦听器,然后将要执行的所有代码放入其中。

playBtn = (ImageButton) findViewById(R.id.button1);
playbutton= (ImageButton) findViewById(R.id.button2);

final MediaPlayer sound = MediaPlayer.create(this,R.raw.evumm);

playBtn.setBackgroundResource(R.drawable.playicon);

playBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if (sound.isPlaying()) {
            sound.pause();
            playBtn.setBackgroundResource(R.drawable.playicon);
        } else {

            sound.start();
            playBtn.setBackgroundResource(R.drawable.pauseicon);
        }
    }

});

playbutton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        if (sound.isPlaying()) {
            sound.pause();
            playbutton.setBackgroundResource(R.drawable.playicon);
        } else {

            sound.start();
            playbutton.setBackgroundResource(R.drawable.pauseicon);
        }

    }
});

sound.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        playBtn.setBackgroundResource(R.drawable.playicon);
        playbutton.setBackgroundResource(R.drawable.playicon);
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我正在尝试在播放声音时显示暂停图标,然后在声音播放完毕后显示播放图标 - I am trying display the pause icon while playing the sound and then display the play icon when the sound finish playing MediaController播放图标以编程方式更改为暂停图标 - MediaController Play Icon to change to Pause Icon programmatically 单击 Android 时更改播放/暂停按钮图标 - Android change play/pause button icon when clicked 单击播放和暂停时更改按钮图标 - Change Button icon on click play and pause 更改 playerNotificationManager 的操作图标,例如播放/暂停/停止 - Change action icon of playerNotificationManager like play/pause/stop 如何使用RecyclerView更改ListView中的播放/暂停音频图标? - How to Change Play/Pause audio icon within a ListView using RecyclerView? 单击启动器图标播放声音 - Play Sound on click of Launcher Icon 在播放视频时,SurfaceView不会与媒体播放器一起显示播放/暂停/后退/前进图标 - SurfaceView is not showing play/pause/backward/forward icon with media player while playing video Android - 两个带有填充颜色、笔划和图标的圆形 ImageButton - Android - Two round ImageButtons with fill color, stroke and icon 检查并查看是否正在播放声音,等待声音结束后再播放 - Check and see if a sound is playing, wait for it to finish and then play another
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM