Android 如何将声音池与线程一起使用?
在我的项目中,当用户触摸特殊位置(如图像中的房子)时,应用程序会播放声音。我有72个职位 我使用了SoundPool类:Android 如何将声音池与线程一起使用?,android,multithreading,soundpool,Android,Multithreading,Soundpool,在我的项目中,当用户触摸特殊位置(如图像中的房子)时,应用程序会播放声音。我有72个职位 我使用了SoundPool类: package com.app; import android.content.Context; import android.media.AudioManager; import android.media.SoundPool; public class sound_pool { private Context pContext; private
package com.app;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
public class sound_pool
{
private Context pContext;
private SoundPool sndPool;
private float rate = 1.0f;
private float leftVolume = 1.0f;
private float rightVolume = 1.0f;
int s_1_1, s_1_2;
// Constructor, setup the audio manager and store the app context
public sound_pool(Context appContext)
{
sndPool = new SoundPool(72, AudioManager.STREAM_MUSIC, 100);
pContext = appContext;
s_1_1 = load(R.raw.s1_1);
s_1_2 = load(R.raw.s1_2);
}
public void play_s_1_1()
{
play(s_1_1);
}
public void play_s_1_2()
{
play(s_1_2);
}
public int load(int sound_id)
{
return sndPool.load(pContext, sound_id, 1);
}
public void play(int sound_id)
{
sndPool.play(sound_id, leftVolume, rightVolume, 1, 0, rate);
}
这是我的主要活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create an instance of our sound manger
snd = new sound_pool(getApplicationContext());
// Set volume rocker mode to media volume
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
final ImageView pic = (ImageView) findViewById(R.id.imageView1);
pic.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.setar_pre_last_color);
final float maskW = bm.getWidth();
final float maskH = bm.getHeight();
float diffW=1;
float diffH=1;
float finalHeight=1;
float finalWidth=1;
finalHeight = ax.getMeasuredHeight();
finalWidth = ax.getMeasuredWidth();
diffW = finalWidth / maskW;
diffH = finalHeight / maskH;
int cordinate_X = (int) ((event.getX()+ v.getScrollX()) /diffW );
int cordinate_Y = (int) ((event.getY()+ v.getScrollY()) / diffH );
int pixelColor = bm.getPixel(cordinate_X , cordinate_Y); //Get the pixel at coordinates
System.out.println( pixelColor );
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
switch ( pixelColor ) {
case -65536:
snd.play_s_1_1();
System.out.println( pixelColor );
break;
case -13539997:
snd.play_s_1_3();
break;
case MotionEvent.ACTION_UP:
System.out.println( pixelColor );
break;
}
return true;
}
});
如何将此项目与线程一起使用?
多谢各位 您的代码很难阅读,但我会创建一个自定义的ImageView,其中包含soundpool方法,并使用处理程序/可运行程序来播放。什么是“使用此项目和线程”的意思?我希望此项目像钢琴按钮应用程序一样工作,当快速触摸按钮时不会出现任何问题。。。或者当触摸一个按钮,然后快速触摸另一个按钮。。。