【问题标题】:How to change button text when audio playback is complete?音频播放完成后如何更改按钮文本?
【发布时间】:2016-06-17 06:04:02
【问题描述】:

我是 Android Studio 的初学者,我制作了一个播放和停止声音的按钮(标记为开始/停止),但在声音播放完成后,该按钮不再显示 start 文本。

如何让按钮在播放完成后更改其文本以开始播放?

如何在切换到另一个视图时停止声音?

我的代码:

public class insideaventador extends Activity {
    MediaPlayer mysound;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.insideaventador);
        mysound = MediaPlayer.create(this, R.raw.lamborghini);
    }


    public void startup(View v) {
        Button button = (Button) v;
        if (mysound == null) {
            mysound = MediaPlayer.create(insideaventador.this, R.raw.lamborghini);
        }

        if (mysound.isPlaying()) {
            mysound.pause();
            ((Button) v).setText("START");
        } else {
            mysound.start();
            ((Button) v).setText("STOP");
        }

    }

}

【问题讨论】:

标签: android audio


【解决方案1】:

MediaPlayer 提供了一个OnCompletionListener 接口,您可以实现该接口以在音频文件播放结束时收到通知。 然后您可以通过setOnCompletionListener() 设置监听器。

例如。

mysound.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
    public void onCompletion(MediaPlayer mp){
        // Perform your steps here, eg.
        ((Button) v).setText("START");
        // (Make sure you make v final before)
    }
})

【讨论】:

  • //在这里执行你的步骤,对不起,从哪一行开始??
  • 对不起,我不明白你的问题。你的意思是应该在哪里插入这些代码行?
  • 是的,这正是我的意思.. :D
  • 不添加新方法,你可以将它添加到startup()的末尾。我建议在创建 Activity 后只调用一次,但这需要您通过findViewById() 提取按钮视图一次。
  • 非常感谢您的回复,您帮了我很多,但是请提出另一个问题,如何使按钮在布局中保持其位置并且不随屏幕大小而变化?
【解决方案2】:

你也需要重置和准备

public void startup(View v) {
    Button button = (Button) v;
    if (mysound == null) { 
        mysound = MediaPlayer.create(insideaventador.this, R.raw.lamborghini);
    } 

    if (mysound.isPlaying()) { 
        mysound.pause(); 
        ((Button) v).setText("START");
    } else { 
        mysound.reset();
        mysound.prepare(); 
        mysound.start(); 
        ((Button) v).setText("STOP");
    } 

} 

【讨论】:

  • 非常感谢您的关注,但很抱歉没有奏效.. :)
  • 如何使按钮不随屏幕大小改变位置并固定在其位置?
  • @beginner 为按钮提供重力到 center_vertical 和 center_horizo​​ntal
  • 你可以使用 android:layout_centerHorizo​​ntal="true" 或/和 android:layout_centerVertical="true" 取决于布局结构
【解决方案3】:

听说你可以得到第一个问题的答案...

https://stackoverflow.com/a/15635785/4156278

选择另一个布局或页面时,您可以停止在Onppause()中播放声音。

【讨论】:

    【解决方案4】:
    public class MainActivity extends Activity {
    
        Context context = this;
        MediaPlayer mp;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mp = MediaPlayer.create(context, R.raw.tone);
            final Button b = (Button) findViewById(R.id.Button);
            b.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        if (mp.isPlaying()){
                            mp.pause();
                            b.setText("Play");
                        }
                      else{
                           mp.start();
                    b.setText("Pause");
                        }
                }
            });
    
        }
    
    }
    

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多