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吗?或者尝试一些新文件,因为我已经检查了代码,它工作正常。