Java 用声音轻扫画廊
我一直在搜索声音库的代码(滑动),这是我最后一次这样做。当我打开活动时,第一张照片会播放声音,但当我刷下一张照片时,它不会播放Java 用声音轻扫画廊,java,android,gallery,swipe,audio,Java,Android,Gallery,Swipe,Audio,我一直在搜索声音库的代码(滑动),这是我最后一次这样做。当我打开活动时,第一张照片会播放声音,但当我刷下一张照片时,它不会播放 public class alphagal extends Activity { MediaPlayer mp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
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);
}
}
}
不需要OnPageChangeListener,因为每次滑动时都会调用InstanceItem()。我稍微修改了您的代码,它正常工作。请检查。还有一件事,您必须覆盖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();
}
}
第二张图片不播放声音。你检查过两个文件都是mp3吗?或者尝试一些新文件,因为我已经检查了代码,它工作正常。