我想在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保留为返回值,则按钮在被按下时会出现并发出声音,并且释放事件时声音会停止。但是,如果我尝试再按一次按钮,则不会发出声音。
答案 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;
}
});