2012-01-18 53 views
0

我对android eclipse相当陌生,而且我正在创建一个应用程序时遇到一些小问题。基本上我想要有6个图像,一旦你点击一个图像,一组声音就会播放。我遇到的问题是无论点击哪个图像,都会发生相同的声音。以下是我的代码活动,任何帮助将不胜感激。我曾尝试让声音池工作,但我还没有找到一个很好的例子来遵循,并没有得到它的工作。多个图像多个声音问题android eclipse

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; 


     } 
} 

请帮我解决这个问题。

回答

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(); 

所有触摸事件,添加交换机的情况下将用同样的方法来处理。

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; 
     } 
    }); 
1

首先,您需要了解setOnTouchListener(this);的含义。当您通过​​设置监听器时,您必须为其提供实现OnTouchListener接口的对象,您的情况为 - GuitarTunerActivityOnTouchListener界面有onTouch()回调,当你触摸视图和你已经实现的时候会调用它,但是onTouch1()不是那个界面的一部分,所以永远不会被调用。因此,您需要在onTouch()方法中添加switch,以检查触摸了哪个视图。

switch (v.getId()) { 
     case R.id.estrsing: 
      resId = R.raw.e; 
      break; 
     case R.id.astrsing: 
      resId = R.raw.a; 
      break; 
} 

编辑顺便说一句,你真的不需要OnTouchListenerView.OnClickListener将满足您的情况更好。

+0

谢谢我现在对我有用,真的很感激:D – chickenchaser 2012-01-18 16:56:51