【问题标题】:YouTube video and Image in a single ViewPager?单个 ViewPager 中的 YouTube 视频和图像?
【发布时间】:2018-05-04 14:24:37
【问题描述】:

我需要制作一个可能包含 YouTube 视频、图像和 gif 的滑块。

我可以制作图像或 gif 的滑块,但是如何将它们全部合并到单个 ViewPager 中。请帮忙。任何建议或链接都​​会有所帮助。

【问题讨论】:

  • 为每个 viewpager-item 制作单独的片段。在第 2 个片段中加载图像,在第 3 个片段中加载 YouTube 视频,在最后一个片段中加载 GIF..
  • 只需为每个页面创建一个片段,并使用 FragmentPagerAdapter 在单个 ViewPager 中显示不同的片段
  • 创建片段对我来说不是一个解决方案,因为 ViewPager 的内容是动态的。它可以包含50个图像和视频。所以根据你的说法,我将不得不为不同的图像和视频创建不同的片段。像 50... 这不是我正在寻找的解决方案。虽然感谢您的回复。
  • 您可以使用具有 3 种视图类型的图像视频和 gif 的 Recyclerview 以及具有水平滚动类型的 LinearLayoutManager .. 跟随亲吻(保持简单愚蠢)原则:P 不要介意 J.K
  • 通过上述解决方案,我能做的是直接有 30 个图像,然后假设 20 个视频。但我不希望它们分开,我希望它们混合在一起。就像随机的,有时图像有时会出现视频。

标签: java android xml android-viewpager android-sliding


【解决方案1】:

假设您的片段将位于 ViewPager 中的固定位置。 你应该用两种不同的布局制作两个片段 让我们称它们为:ImageFragmentVideoFragment。 你还应该扩展FragmentPagerAdapter 并像这样实现getItem(int position)

@Override
public Fragment getItem(int position) {
    if (position == 2)
        return VideoFragment.newInstance();
    return ImageFragment.newInstance();
}

编辑: 所以这次我们假设你在 ViewPager 的末尾有很多图像和一个视频。 因此您可以将图像的路径放在ArrayList<String> 中(可能是本地路径或来自服务器的远程路径),并将视频路径也放在字符串变量中......并将这些字符串中的每一个传递给适当的片段,如下所示:

    public class MultiMediaAdapter extends FragmentPagerAdapter {
        private List<String> paths;
        private String videoPath;

        public MultiMediaAdapter (FragmentManager fm, List<String> paths, String videoPath) {
            super(fm);
            this.paths = paths;
            this.videoPath = videoPath;
        }

        @Override
        public Fragment getItem(int position) {
//pay attintion that position starts  counting from zero
            if (position == paths.size()) //video at the end of the ViewPager
                return VideoFragment.newInstance(videoPath);
            return ImageFragment.newInstance(paths.get(position));
        }

        @Override
        public int getCount() {
            return this.paths.size()+1; //+1 for the video
        }
    }

你应该像这样在片段中加载每个图像:

 public class ImageFragment extends Fragment {
        private String path;

        public static ImageFragment newInstance(String path){
            ImageFragment fragment = new ImageFragment();
            fragment.setPath(path);

            return fragment;
        }

        private void setPath(String path) {
            this.path = path;
        }

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_image, container, false);

    ImageView imageView = rootView.findViewById(R.id.imageView);

            if (path != null){
              // and here load image into imageView using path, the way you want
            }

            return rootView;
        }
    }

VideoFragment 与 ImageFragment 类似

【讨论】:

  • 创建片段无济于事。因为我的 ViewPager 可以包含 50 个图像或视频。它实际上是动态的。所以创建这么多片段对我的解决方案没有好处。
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 2011-08-17
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 2017-11-05
  • 2011-07-13
相关资源
最近更新 更多