我正在尝试在点击视图对象时播放SoundPool。
我已经成功实施了它,但发现点击的声音会滞后。
我一直在研究StackOverFlow和互联网上的解决方案,最好的解决方案似乎是将SoundPool放在一个单独的线程上。
我对整个Thread事情都很陌生,所以我现在还不知道该怎么做。
我已经按照THIS指南创建了一个SoundPool线程,但是,我不知道如何访问它,甚至分配我想玩的剪辑。
有人可以给我一个例子,告诉我如何在点击视图中的对象时调用SoundPool线程播放我的剪辑。
请在下面找到我的onClick代码:
@Override
public boolean onTouch(View v, MotionEvent event) {
int actionPerformed = event.getAction();
switch(actionPerformed) {
case MotionEvent.ACTION_DOWN: {
if (Math.pow((event.getX() - a_Ball.getX()),2)
+ Math.pow((event.getY() - a_Ball.getY()), 2)
<= Math.pow(a_Ball.getDiameter(),2)) {
//pCheck = !pCheck;
if (pauseBall == false) {
SoundPool soundPool = new SoundPool(1,AudioManager.STREAM_MUSIC,1);
clickSound = soundPool.load(MainActivity.this, R.raw.click, 1);
/*soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId,int status) {
soundPool.play(clickSound,1.0f, 1.0f, 0, 0, 1.0f);
}
});*/
//Increase Ball Speed
sIncrease = true;
}
} else {
if (pauseBall == false) {
//set minus health when not touch on ball
health--;
TextView txtHealth = (TextView)findViewById(R.id.health);
String tempHealth = txtHealth.getText().toString();
tempHealth = getResources().getString(R.string.health) + String.valueOf(health);
txtHealth.setText(tempHealth);
}
}
break;
}
default:
return false;
}
return true;
} //onTouch end
提前致谢。
答案 0 :(得分:0)
你不需要线程来发出没有滞后的声音。滞后来自声音文件的加载,尝试创建SoundPool并提前加载声音(soundPool.load
)(例如onCreate
),然后只需调用{{1}中的soundPool.play
方法。
答案 1 :(得分:0)
好的,所以不是在另一个类中进行,我决定在一个类中完成它并自己创建一个新线程。似乎运作良好。
我会将此主题标记为答案。