多个图像多个声音发出android eclipse

时间:2012-01-18 12:36:41

标签: android eclipse

我对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;


        }
}

请帮我解决这个问题。

3 个答案:

答案 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接口的对象,在您的情况下为GuitarTunerActivityOnTouchListener接口具有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;
} 

编辑顺便说一下,您真的不需要OnTouchListenerView.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;
        }
    });