繁体   English   中英

如何仅在按住按钮时播放音频?

[英]How to play audio only while button is held down?

我正在尝试制作一个简单的应用程序:中间有一个按钮可供孩子按下。 只要按住该按钮,就可以播放特定的MP3。

目前,我尝试使用onClick ,但是,仅在释放按钮时才能播放。

而不是使用的onClickListener暴露罢了那么界面按下和释放,你就需要使用onTouchListener -它公开了一个视图的所有触摸事件。

myButton.setOnTouchListener( new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch ( event.getAction() ) {

            MotionEvent.ACTION_DOWN:

                // start playing
                return true;

            MotionEvent.ACTION_UP:

                // stop playing
                return true;
        }

        return false;
    }
});

尝试这样的事情。 使用布尔“播放”,您可以在其他地方创建线程/循环,以检查是否仍在播放并保持音频运行。

button.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        if (arg1.getAction()==MotionEvent.ACTION_DOWN) {
            playing = true;
        } else {
            playing = false;
        }
        return true;
    }
});

尝试OnFocusChangeListener

 Button.setOnFocusChangeListener(new OnFocusChangeListener() {          
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
               // code to execute when Button loses focus, i.e. stop music
            }
        }
    });

由于按钮是一个视图组件,您可以使用View.OnTouchListener事件监听ACTION_BUTTON_PRESS&ACTION_BUTTON_RELEASE MotionEvent

这是一个例子:

yourButton.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_BUTTON_PRESS){

            // Start Video
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_BUTTON_RELEASE) { 
            // End Video

            return true;
        }
        return false;
    }
}); 

这是我的代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void start_recording(View view){
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.test1);
        mediaPlayer.start();
    }
}

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM