Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Soundpool-触摸事件_Android_Events_Button_Touch_Soundpool - Fatal编程技术网

Android Soundpool-触摸事件

Android Soundpool-触摸事件,android,events,button,touch,soundpool,Android,Events,Button,Touch,Soundpool,我正在制作一个drumpad应用程序,它有八个图像按钮,可以在按下按钮时播放声音。我一直在试图找出如何使按下按钮更具响应性,因为问题是Soundpool仅在释放按钮时才会播放文件 我发现有一种方法可以使用onTouchEvent使按钮对触摸做出反应,但我不知道如何在代码中实现这一点。我已经尝试对声音使用.ogg和.wav文件类型,但这不是问题所在。我还计划创建一个按钮,当按键按下时循环声音文件,但我的主要问题是如何使所有按钮响应触摸,而不是释放。守则: package com.example.u

我正在制作一个drumpad应用程序,它有八个图像按钮,可以在按下按钮时播放声音。我一直在试图找出如何使按下按钮更具响应性,因为问题是Soundpool仅在释放按钮时才会播放文件

我发现有一种方法可以使用onTouchEvent使按钮对触摸做出反应,但我不知道如何在代码中实现这一点。我已经尝试对声音使用.ogg和.wav文件类型,但这不是问题所在。我还计划创建一个按钮,当按键按下时循环声音文件,但我的主要问题是如何使所有按钮响应触摸,而不是释放。守则:

package com.example.user.soundboard;
import android.os.Bundle;
import android.view.View;
import android.view.MotionEvent;
import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {


SoundPool mySound, mySound2, mySound3, mySound4, mySound5, mySound6, mySound7, mySound8;

int hihatId, kickId, snareId, clapId, snare2Id, hihat2Id, kick2Id, openHatId;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mySound = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound2 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound3 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound4 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound5 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound6 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound7 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
    mySound8 = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);

    hihatId = mySound.load(this, R.raw.ogghat30, 1);
    hihat2Id = mySound.load(this, R.raw.ogghihat14, 1);
    kickId = mySound.load(this, R.raw.oggkick, 1);
    kick2Id = mySound.load(this, R.raw.oggkick2, 1);
    snareId = mySound.load(this, R.raw.oggsnare8, 1);
    snare2Id = mySound.load(this, R.raw.oggsnare8, 1);
    clapId = mySound.load(this, R.raw.oggclap5, 1);
    openHatId = mySound.load(this, R.raw.ogghat24, 1);

}

public void playHihat(View view) {
    mySound.play(hihatId, 1, 1, 1, 0, 1);
}

public void playHihat2(View view) {
    mySound.play(hihat2Id, 1, 1, 1, 0, 1);
}

public void playOpenHat(View view) {
    mySound.play(openHatId, 1, 1, 1, 0, 1);
}

public void playKick(View view) {
    mySound.play(kickId, 1, 1, 1, 0, 1);
}

public void playKick2(View view) {
    mySound.play(kick2Id, 1, 1, 1, 0, 1);
}

public void playSnare(View view) {
    mySound.play(snareId, 1, 1, 1, 0, 1);
}

public void playSnare2(View view) {
    mySound.play(snare2Id, 1, 1, 1, 0, 1);
}

public void playClap(View view) {
    mySound.play(clapId, 1, 1, 1, 0, 1);
}
对于ImageButtons,我目前在布局中使用onClick方法


谢谢你的帮助

而不是
OnClickListener
您必须使用
OnTouchListener

yourButton.setOnTouchListener(new OnTouchListener() {
   @Override
    public boolean onTouch(View v, MotionEvent event) {
       if(event.getAction() == MotionEvent.ACTION_UP){
           // Release sound on touch up
           return true;
       } else if(event.getAction() == MotionEvent.ACTION_DOWN){
           // Play sound
           return true;
       }
        return false;
    }
});

您可以将OnTouchEventListener设置为您的视图,这样您就可以播放触动事件的声音

这里有一个例子:

yourButtonView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()){
                case MotionEvent.ACTION_DOWN:
                    //Fired when you touch the button
                    break;

                case MotionEvent.ACTION_MOVE:
                    //Fired once you are touching button and you move your finger without release the button
                    break;

                case MotionEvent.ACTION_UP:
                    //Fired when you stop touching the button
                    break;
            }
            return true;
        }
    });

谢谢工作起来很有魅力!然而,我遇到了一个新的问题,按钮图像在按下按钮时不再改变。在我使用“android:src=“@drawable/changecolorsnare”之前“在布局中。现在,我还尝试创建onTouch来更改按钮图像,这适用于其他不使用我为播放声音而实现的新onTouch代码的按钮。如果同一个按钮的声音和图像视图都有onTouch和onTouch,应用程序就会崩溃。有没有一种方法可以把它们结合起来,或者用另一种方法,而不改变声音的新代码?顺便说一句,我正在使用图像按钮。