2014-01-21 259 views
0

我已经使这个程序。这里使用viewpager图像滑动&播放与图像匹配的声音。现在它工作正常,但只有问题是在第一页图像它不播放声音,因为页面启动时不刷卡。我怎么解决这个问题呢?..这是我的代码声音播放viewpager

public class Learning_Numbers extends Activity { 
    MediaPlayer mp; 
    MediaPlayer BG; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_numbers); 
     ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra); 
     ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
     myPager.setAdapter(adapter); 
     myPager.setOnPageChangeListener(player); 
     myPager.setCurrentItem(0); 
     BG = MediaPlayer.create(this, R.raw.jingle); 
     BG.setLooping(true); 
     BG.setVolume(100, 100); 
     BG.start(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     BG.pause(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     BG.start(); 
    } 

    private int[] mAudio = new int[]{R.raw.one,R.raw.two,R.raw.three,R.raw.four,R.raw.five,R.raw.six,R.raw.seven,R.raw.eight,R.raw.nine,R.raw.ten}; 

    private int imageArra[] = { R.drawable.no1,R.drawable.no2,R.drawable.no3,R.drawable.no4,R.drawable.no5,R.drawable.no6,R.drawable.no7,R.drawable.no8,R.drawable.no9,R.drawable.no10}; 

OnPageChangeListener player = new OnPageChangeListener() 
    { 

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

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

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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

这里MP用于图像刷卡声音& BG的背景音。

回答

0

我试过的onCreate这个&工作对我来说..

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_numbers); 
     ViewPagerAdapter adapter = new ViewPagerAdapter(this, imageArra); 
     ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
     myPager.setOnPageChangeListener(player); 
     myPager.setAdapter(adapter); 
     myPager.setCurrentItem(0); 
     BG = MediaPlayer.create(this, R.raw.jingle); 
     BG.setLooping(true); 
     BG.setVolume(100, 100); 
     BG.start(); 
     mp = MediaPlayer.create(Numbers.this, mAudio[0]); 
     mp.start(); 
    } 

,最后加入两行代码再次ONSELECT ..现在它是为我工作很好..

0

查看viewpager的源代码。

void setCurrentItemInternal(int item, boolean smoothScroll, boolean always, int velocity)  { 
... 
if (mFirstLayout) { 
    // We don't have any idea how big we are yet and shouldn't have any pages either. 
    // Just set things up and let the pending layout handle things. 
    mCurItem = item; 
    if (dispatchSelected && mOnPageChangeListener != null) { 
     mOnPageChangeListener.onPageSelected(item); 
    } 
    if (dispatchSelected && mInternalPageChangeListener != null) { 
     mInternalPageChangeListener.onPageSelected(item); 
    } 
    requestLayout(); 
... 

// in setAdapter(), It will call setCurrentItemInternal() .. 

所以,只需setOnPageChangeListener(player);在setAdapter之前。它可能按预期工作。方便的技巧

+0

它没有奏效。 ..我做了这个.. myPager.setOnPageChangeListener(player); \t \t myPager.setAdapter(adapter); –

+0

@SuRajPrince这是一个查看“错误”(或功能)。请参阅code.google.com/p/android/issues/detail?id=27526。以编程方式调用onpageChangedListener.onPageSelected(0)。 – jiashie

+0

谢谢你的回应我已经做到了..你能告诉我,如果我在屏幕上有多个图像查看器,但只有一个在屏幕上显示,它可以通过按钮进行更改。可能吗?? –