我对android eclipse相当新,我对我正在制作的应用程序有轻微的问题。基本上我想要有6张图像,一旦你点击图像就会播放设定的声音。我遇到的问题是无论点击哪个图像都会发出相同的声音。以下是我的活动代码,任何帮助将不胜感激。我试过让声音池工作,但我没有找到一个很好的例子可以遵循而无法让它工作。
package org.example.tuner;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.R.raw;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
public class GuitarTunerActivity extends Activity implements OnTouchListener {
private MediaPlayer mp;
ImageView estring, astring;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setVolumeControlStream(AudioManager.STREAM_MUSIC);
estring = (ImageView) findViewById(R.id.estring);
estring.setOnTouchListener(this);
astring = (ImageView) findViewById(R.id.astring);
astring.setOnTouchListener(this);
}
public boolean onTouch(View v, MotionEvent event) {
int resId;
estring = (ImageView) findViewById(R.id.estring);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
resId = R.raw.e;
System.out.println("Image is Touched");
break;
default:
return super.onTouchEvent(event);
}
if (mp != null) {
mp.release();
}
mp = MediaPlayer.create(this, resId);
mp.start();
return true;
}
public boolean onTouch1(View v, MotionEvent event) {
int resId;
astring = (ImageView) findViewById(R.id.astring);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
resId = R.raw.a;
System.out.println("Image is Touched");
break;
default:
return super.onTouchEvent(event);
}
if (mp != null) {
mp.release();
}
mp = MediaPlayer.create(this, resId);
mp.start();
return true;
}
}
请帮我解决这个问题。
答案 0 :(得分:1)
您应该在onTouch(View v, MotionEvent event)
switch (v.getId()) {
case R.id.estrsing: resId = R.raw.e; break;
case R.id.astrsing: resId = R.raw.a; break;
}
...
mp = MediaPlayer.create(this, resId);
mp.start();
所有触摸事件都将采用相同的方法处理。
答案 1 :(得分:1)
首先,您需要了解setOnTouchListener(this);
的含义。当您通过setOnTouchListener()
设置侦听器时,必须为其提供实现OnTouchListener
接口的对象,在您的情况下为GuitarTunerActivity
。 OnTouchListener
接口具有onTouch()
回调,当您触摸View时调用该回调并且已实现,但onTouch1()
不是该接口的一部分,因此永远不会被调用。因此,您需要在switch
方法中添加onTouch()
,以检查触摸了哪个视图。
switch (v.getId()) {
case R.id.estrsing:
resId = R.raw.e;
break;
case R.id.astrsing:
resId = R.raw.a;
break;
}
编辑顺便说一下,您真的不需要OnTouchListener
,View.OnClickListener
会更适合您的情况。
答案 2 :(得分:0)
estring = (ImageView) findViewById(R.id.estring);
estring.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// do stub
return false;
}
});
astring = (ImageView) findViewById(R.id.astring);
astring.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
// do stub
return false;
}
});