我正在製作一個帶有八個按鈕的drumpad應用程序,可以在按鈕按下時播放聲音。我一直在試圖弄清楚如何使按鈕的響應更加靈敏,因爲問題在於Soundpool只有在釋放按鈕時纔會播放文件。Android 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方法。
感謝您的幫助!
謝謝!奇蹟般有效!不過,我遇到了一個新問題,即按鈕按下時按鈕圖像不再發生變化。之前我在佈局中使用了「android:src =」@ drawable/changecolorsnare「。現在,我嘗試創建onTouch來更改按鈕圖像,該按鈕圖像適用於其他按鈕,該按鈕不使用用於播放聲音的新的onTouch代碼。如果我的onTouch聲音和onTouch for ImageView功能同一個按鈕,應用程序會崩潰。有沒有一種方法可以將它們結合起來或以另一種方式進行,而無需更改聲音的新代碼?我正在使用圖像按鈕。 – 808