2014-03-12 58 views
0

我試圖讓它當我放下並將對象放到文本視圖上時,我認爲它會起作用,類似於我之前只設置了不同的激活方式。這是我設置它的方式。丟棄對象時播放聲音Android

MediaPlayer mysound; 
TextView target =(TextView) findViewById(R.id.task1); 
target.setOnDragListener(dragListener); 

OnDragListener dragListener = new OnDragListener() 
{ 
    @Override 
    public boolean onDrag(View v, DragEvent event) 
    { 
      int dragEvent = event.getAction(); 
      //TextView dropText = (TextView) v; 

      switch(dragEvent) 
      { 
       case DragEvent.ACTION_DRAG_ENTERED: 

       break; 

       case DragEvent.ACTION_DRAG_EXITED: 
        break; 

       case DragEvent.ACTION_DROP: 
        mysound=MediaPlayer.create(Quiz.this, R.raw.error); 
        mysound.setOnCompletionListener(new OnCompletionListener() { 
         public void onCompletion(MediaPlayer mysound) { 
          // TODO Auto-generated method stub 
          mysound.release(); 
         } 

        }); 
        mysound.start(); 
        break; 
      } 

      return true; 
    } 
}; 

日誌貓

03-12 22:49:50.799:d/MediaPlayer的(10720):啓動()MURI是URL抑制 03-12 22:49:50.809:I/ViewRootImpl(10720):報告丟棄結果:真

回答

1

因爲它的聲音很短,只是使用聲池將其加載到內存中。通過這種方式,您可以快速訪問聲音。

import android.app.Activity; 
import android.media.AudioManager; 
import android.media.SoundPool; 
import android.media.SoundPool.OnLoadCompleteListener; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.DragEvent; 
import android.view.View; 
import android.view.View.OnDragListener; 
import android.widget.TextView; 



public class MainActivity extends Activity implements OnDragListener { 


boolean loaded=false; 
SoundPool soundPool; 
int soundID; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); // here use the file name that task1 textview is contained in 
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 

    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 
      @Override 
      public void onLoadComplete(SoundPool soundPool, int sampleId, 
        int status) { 
       loaded = true; 
      } 
     }); 
     soundID = soundPool.load(this, R.raw.error, 1); 


     TextView target =(TextView) findViewById(R.id.task1); 
     target.setOnDragListener(this); 


     } 

@Override 
public boolean onDrag(View v, DragEvent event) { 
    int dragEvent = event.getAction(); 
    //TextView dropText = (TextView) v; 

    switch(dragEvent) 
    { 
     case DragEvent.ACTION_DRAG_ENTERED: 

     break; 

     case DragEvent.ACTION_DRAG_EXITED: 
      break; 

     case DragEvent.ACTION_DROP: 
     if (loaded) { 
       AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); 
       float actualVolume = (float) audioManager 
         .getStreamVolume(AudioManager.STREAM_MUSIC); 
       float maxVolume = (float) audioManager 
         .getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
       float volume = actualVolume/maxVolume; 

     soundPool.play(soundID, volume, volume, 1, 0, 1f); 
     Log.e("Test", "Played sound"); 
    } 
      break; 
    } 

    return true; 

}}

+0

我在哪裏可以初始化聲音池? –

+0

當我設置聲音池時,它一直給我提供錯誤。我不知道爲什麼,但它seying有這條線上的語法錯誤「soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()」 –

+0

我編輯了我的答案,你可以將該類複製到你的,並將setoncontentview參數更改爲您的xml文件名字,我不知道你拖入textview的東西,所以我可以做的 – j2emanue