3

我對ViewPager有問題,無法在此網站上或通過Google搜索找到答案。
如何在滑動頁面時播放短音?
如何更改我的代碼,我想添加mediaplayer /播放聲音。 (在原始文件夾中的聲音)
謝謝,如何在滑動頁面時播放短音?

@Override 
public void onCreate(Bundle savedInstanceState) {  
super.onCreate(savedInstanceState);  
setContentView(R.layout.main);  
MyPagerAdapter adapter = new MyPagerAdapter(); 
ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);  
myPager.setAdapter(adapter);  
myPager.setCurrentItem(2); 
} 



private class MyPagerAdapter extends PagerAdapter { 

     public int getCount() { 
       return 5; 
     } 

     public Object instantiateItem(View collection, int position) { 

       LayoutInflater inflater = (LayoutInflater) collection.getContext() 
           .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

       int resId = 0; 
       switch (position) { 
       case 0: 
         resId = R.layout.farleft; 
         break; 
       case 1: 
         resId = R.layout.left; 
         break; 
       case 2: 
         resId = R.layout.middle; 
         break; 
       case 3: 
         resId = R.layout.right; 
         break; 
       case 4: 
         resId = R.layout.farright; 
         break; 
       } 

       View view = inflater.inflate(resId, null); 

       ((ViewPager) collection).addView(view, 0); 

       return view; 
     } 
     @Override 
     public void destroyItem(View arg0, int arg1, Object arg2) { 
       ((ViewPager) arg0).removeView((View) arg2); 
     } 

     @Override 
     public boolean isViewFromObject(View arg0, Object arg1) { 
       return arg0 == ((View) arg1); 
     } 

     @Override 
     public Parcelable saveState() { 
       // TODO Auto-generated method stub 
       return null; 
     } 

回答

1

一個例子:

private static final int rId = R.raw.sound; 
private int sid=-1; 
private boolean loaded = false; 
SoundPool soundPool; 

private SoundPool.OnLoadCompleteListener listener = 
new SoundPool.OnLoadCompleteListener(){ 
@Override 
public void onLoadComplete(SoundPool soundPool, int sid, int status){ // could check status value here also 
    if (this.sid == sid) { 
    this.loaded = true; 
    } 
} 
}; 


public void initSound() { 
    soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 100); 
    soundPool.setOnLoadCompleteListener(listener); 
    this.sid = soundPool.load(getApplicationContext(), rId, 1); 
} 

public void SoundPlay() { 
    new Thread(new Runnable() { 
    @Override 
    public void run() { 
     if (loaded) { 
     soundPool.play(this.sid, 1.0, 1.0, 1, 0, 1f);  
     } 
    }).start(); 
} 

所以,你會添加一個構造函數,如:

MyPagerAdapter() { 
    initSound(); 
} 

,並每次在instantiateItem(玩)與SoundPlay ();

我還沒有測試過上面的代碼,但在我自己的東西中使用類似。

相關問題