2014-11-24 44 views
0

我一直在尋找的代碼與聲音(刷卡)畫廊則這是最後我做到了。當我打開活動時,第一張照片播放它的聲音,但當我刷下一張照片時,它不會。畫廊刷卡用聲音

public class alphagal extends Activity { 

    MediaPlayer mp; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.numgal); 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     ImagePagerAdapter adapter = new ImagePagerAdapter(); 
     viewPager.setAdapter(adapter); 

    } 


    private class ImagePagerAdapter extends PagerAdapter { 

     private int[] mImages = new int[] {R.drawable.a,R.drawable.bb}; 
     private int[] mAudio = new int[]{R.raw.capture,R.raw.capture2}; 

     @Override 
     public int getCount() { 
      return mImages.length; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((ImageView) object); 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      Context context = alphagal.this; 
      ImageView imageView = new ImageView(context); 

      imageView.setScaleType(ImageView.ScaleType.CENTER); 
      imageView.setImageResource(mImages[position]); 
      ((ViewPager) container).addView(imageView, 0); 
      if(position>=1){ 
       mp = MediaPlayer.create(alphagal.this, mAudio[position-1]); 
       mp.start(); 
      } 
      return imageView; 
     } 
     OnPageChangeListener player = new OnPageChangeListener() 
     { 

      @Override 
      public void onPageSelected(int arg0) 
      { 
       mp = MediaPlayer.create(alphagal.this, mAudio[arg0]); 
       mp.start(); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) 
      { 
      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) 
      { 
      } 
     }; 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((ImageView) object); 
     } 
    } 
} 

回答

0

沒有必要OnPageChangeListener的,因爲每個刷卡instantiateItem()是called.I修改代碼點點,它的工作,請您及時檢查。一件事你必須覆蓋onbackpress()來停止媒體播放器,否則它會繼續播放,如果你退出應用程序。

public class alphagal extends Activity { 

    MediaPlayer mp; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.numgal); 
     ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
     ImagePagerAdapter adapter = new ImagePagerAdapter(); 
     viewPager.setAdapter(adapter); 

    } 

    private class ImagePagerAdapter extends PagerAdapter { 
     private int[] mImages = new int[] {R.drawable.a,R.drawable.bb}; 
     private int[] mAudio = new int[]{R.raw.capture,R.raw.capture2}; 

     @Override 
     public int getCount() { 
      return mImages.length; 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((ImageView) object); 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      Context context = alphagal.this; 
      ImageView imageView = new ImageView(context); 

      imageView.setScaleType(ImageView.ScaleType.CENTER); 
      imageView.setImageResource(mImages[position]); 
      ((ViewPager) container).addView(imageView, 0); 
      if (position >= 1) { 
       //if you have already the instance of media player 
       if (mp != null) { 
        if (mp.isPlaying()) 
         mp.stop(); 
        mp.reset(); 

        try { 
         AssetFileDescriptor afd = getResources() 
           .openRawResourceFd(mAudio[position - 1]); 
         if (afd == null) 
          return null; 
         mp.setDataSource(afd.getFileDescriptor(), 
           afd.getStartOffset(), afd.getLength()); 
         afd.close(); 
         mp.prepare(); 
        } catch (IOException ex) { 
         ex.printStackTrace(); 
        } catch (IllegalArgumentException ex) { 
         ex.printStackTrace(); 
        } catch (SecurityException ex) { 
         ex.printStackTrace(); 
        } 
       } else { 
        // player is null 
        // it will create new MediaPlayer instance, setDataSource 
        // and call prepare 
        mp = MediaPlayer 
          .create(alphagal.this, mAudio[position - 1]); 
       } 
       mp.start(); 
      } 
      return imageView; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((ImageView) object); 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     //need to handle otherwise if you exit from the app media 
     //player continue to play 
     if (null != mp) { 
      mp.stop(); 
      mp.release(); 
     } 

     super.onBackPressed(); 
    } 
} 
+0

第2張圖片無法播放聲音。 – 2014-11-26 04:01:23

+0

你檢查兩個文件都是MP3嗎?或嘗試使用一些新文件,因爲我檢查了它正常工作的代碼。 – 2014-11-26 05:09:16