播放音频,直到在Android中按下按钮

时间:2019-03-01 12:47:02

标签: java android

我想在Android中制作Harmonium的按钮,当按下Button时会产生声音。释放按钮时,声音停止。我的代码如下。

package com.example.akshay.soundapp;

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.*;

public class MainActivity extends AppCompatActivity {

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

        final Button btn=(Button)findViewById(R.id.btn);
        final MediaPlayer mp=MediaPlayer.create(this,R.raw.sound);

        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                if(motionEvent.getAction()==MotionEvent.ACTION_DOWN)
                {
                    mp.start();
                }
                else if(motionEvent.getAction()==MotionEvent.ACTION_UP)
                {
                    mp.stop();
                }

                return false;
            }
        });
    }
}

对于onTouch(),如果我将true保留为返回值,则按钮似乎没有被按下,而仅产生1次声音。下次按下时,它不起作用。

如果我将false保留为返回值,则按钮在被按下时会出现并发出声音,并且释放事件时声音会停止。但是,如果我尝试再按一次按钮,则不会发出声音。

1 个答案:

答案 0 :(得分:0)

您应该使用pause()而不是stop(),然后返回true将在以后工作。另外,如果您希望音频在停止触摸按钮之前永不停止,则应使用setLooping(true)。

      btn.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if(motionEvent.getAction()==MotionEvent.ACTION_DOWN)
            {
                mp.setLooping(true);
                mp.start();
            }
            else if(motionEvent.getAction()==MotionEvent.ACTION_UP)
            {
                mp.pause();
            }

            return true;
        }
    });