YouTube видео и изображение в одном ViewPager? - PullRequest
0 голосов
/ 04 мая 2018

Мне нужно сделать слайдер, который может содержать видео YouTube, изображение и рисунок.

Я могу сделать слайдер из изображения или изображения, но как мне объединить их все в один ViewPager. Пожалуйста помоги. Любые предложения или ссылки будут полезны.

1 Ответ

0 голосов
/ 04 мая 2018

Предположим, что ваши фрагменты будут в фиксированных позициях в вашем ViewPager. Вы должны сделать два фрагмента с двумя разными макетами давайте назовем их: ImageFragment и VideoFragment. Вы также должны продлить FragmentPagerAdapter и реализовать getItem(int position) так:

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

EDIT: Поэтому на этот раз мы предположим, что у вас есть много изображений и одно видео в конце 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...