2012-01-18 51 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