1

所以我使用可滚动标签+滑动导航在不同的标签屏幕上播放不同的音乐文件。

这是我为自动生成的默认片段修改的 OnCreateView

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main_dummy,
                container, false);
         TextView dummyTextView = (TextView) rootView
         .findViewById(R.id.sT);
         dummyTextView.setText(Integer.toString(getArguments().getInt(
         ARG_SECTION_NUMBER)));
        AssetFileDescriptor fda;
        MediaPlayer amp = new MediaPlayer();

        try {    
            fda = rootView.getContext().getAssets().openFd("songname.mp3");
            amp.reset();
            amp.setDataSource(fda.getFileDescriptor());
            amp.prepare();
            amp.start();

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
        return rootView;    

这里我只有一个显示屏幕索引号的文本视图。假设第一个屏幕显示“1”,第二个屏幕在 textView 中显示“2”......等等。

我也想要每个屏幕的 imageView,但我可以做到这一点。

问题在于播放音频。

现在它只是在屏幕启动时播放一首歌。说正在播放歌曲。

如果用户向左或向右滑动,如何改变播放的歌曲?我需要停止这个,根据索引号(ARG_SECTION_NUMBER)更改“setDataSource”......并再次播放。

但是如何知道用户是否滑动并更改了打开的选项卡?(无论是通过滚动标签还是滑动)

我应该在什么用户事件上进行这些更改?我可以设置一些默认情况下停止播放歌曲并在屏幕变化时切换到下一首的东西......?

我打算最终添加一个播放/暂停按钮。即使这样,我也想用屏幕更改资源..因此这个问题

谢谢!

4

1 回答 1

2

ViewPager 有一个setOnPageChangeListener()方法,它允许您设置一个对象,当新页面成为用户正在查看的页面时,该对象将获得回调。

这样的事情会让你走上正确的道路:

mPageChangeListener = new OnPageChangeListener() {

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int pos) {
        playSoundForPage(pos);
    }

};
yourViewPager.setOnPageChangeListener(mPageChangeListener);

但是,您必须将其放入拥有您的 ViewPager(活动或片段)而不是您的适配器的任何地方。

或者你可以使用这个:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else {  }
}
于 2013-08-14T04:33:39.070 回答