Android реализует автоматическое воспроизведение видео внутри вложенного просмотра вторсырья, например, автоматическое воспроизведение видео в Instagram

#android #android-recyclerview #nestedrecyclerview

Вопрос:

Я хотел бы реализовать функцию автоматического воспроизведения видеоплеера Instagram внутри своего приложения, и для этого я попробовал несколько библиотек, а также попробовал несколько способов настройки обратных вызовов для передачи обратного вызова, связанного с жизненным циклом, из фрагмента в вертикальный RecyclerView, в Вертикальный RecyclerView.

Я прошелся по следующим библиотекам:

  • arthur3486/ARVI: Эта библиотека выглядит более перспективной, и она использует ExoPlayer (т. Е. медиаплеер, разработанный Google для Android) под капотом, эта библиотека обеспечивает большую настройку и предоставляет больше функций управления памятью. Он обеспечивает выпуск объектов медиаплеера, а также обеспечивает режимы автоматического воспроизведения.
  • MostafaAnter/VideoPlayerInsideRecyclerView: Эта библиотека также использует ExoPlayer в качестве медиаплеера, но использует аппаратное ускорение для использования представления текстур для проектирования пользовательского интерфейса видеоплеера. Этим также управляет один разработчик, но он был недавно обновлен.
  • google/ExoPlayer: Это разработанный Google медиаплеер для Android. Это библиотека ванильных медиаплееров, которую мы можем использовать напрямую, но нам необходимо реализовать все функции управления тем, когда и какие медиа-записи будут воспроизводиться приложением и как приложение будет выпускать эти медиа.
  • mobileappsvn/AutoPlayVideoRecyclerView: Этот код библиотеки полностью написан на Java и был последним обновлением 2-4 года назад. Согласно их readme, эта библиотека нацелена на некоторые из этих функций. Но все же эта библиотека не предоставляет никакой информации, связанной с двумя уровнями управления видеоплеером RecyclerView. Так что нам придется попробовать и убедиться, что это должно сработать или нет.
  • klinker24/Android-SimpleVideoView: Это также хорошая библиотека и обновления 2 года назад. Он полностью разработан на Java и до сих пор управляется одним разработчиком. Но опять же, нам нужно протестировать 2 уровня управления, используя также эту библиотеку. Я также нашел несколько примеров, связанных с сутью, поэтому я могу попробовать и убедиться, что он должен соответствовать нашим требованиям.

Я обнаружил, что arthur3486/ARVI кажется многообещающим, и я интегрировал его и попытался настроить все в соответствии с предоставленными рекомендациями, но это не работает и приводит к неразрешимым ошибкам.

Ответ №1:

Вот классная библиотека для обработки событий жизненного цикла в виде делегированных полей. Проявив немного воображения, вы сможете избежать всех шаблонов из моего следующего примера https://github.com/Link184/Lifecycle-Delegates

Или, благодаря компонентам google arch, мы можем сделать что-то вроде этого:

 class MyAdapter(): ... {
    

    class ViewHolder(): ..., LifecycleObserver {
        init { 
            itemView.findViewTreeLifecycleOwner()?.lifecycle?.addObserver(this)
        }

        @OnLifecycleEvent(ON_PAUSE)
        fun pause() { player.pause() }

        @OnLifecycleEvent(ON_RESUME)
        fun resume() { player.resume() }

        @OnLifecycleEvent(ON_DESTROY)
        fun destroy() { player.release() }
    }

}
 

Комментарии:

1. Я сделал это, но не уверен, как и где использовать аргумент жизненного цикла в классе MyAdapter? Пожалуйста, поделитесь некоторыми подробностями, а также у меня есть вложенный Recyclerview (горизонтальный внутри вертикального), и по горизонтали будут воспроизводиться видео. Не могли бы вы, пожалуйста, дать немного больше указаний или подсказок?

2. Нам действительно не нужен аргумент жизненного цикла в конструкторе адаптера, я удалил его из примера. Вы можете получить его с помощью функции расширения View.findViewTreeLifecycleOwner() . Вы можете свободно использовать все вложенные представления переработчика.

3. Я сделал то же самое, что и extended LifecycleObserver в классе ViewHolder, и создал методы с OnLifecycleEvent аннотациями, но я не получаю обратного вызова в этих методах. Нужно ли мне делать что-то еще, кроме этого? а также не уверен, Как его использовать github.com/Link184/Lifecycle-Delegates библиотека?

4. @BipinVayalu, к которому вы должны прикрепиться LifecycleObserver LifecycleOwner . В моем примере мы делаем это в конструкторе держателя itemView.findViewTreeLifecycleOwner()?.lifecycle?.addObserver(this) представления , убедитесь, что вы используете зависимости жизненного цикла, такие как AppCompatActivity вместо Activity и Fragment импортированные из androidx

5. Да, я сделал то же самое, что и то, чем вы поделились в коде, но я использую DaggerFragment то, что расширено из Fragment класса, который был импортирован из androidx. Короче говоря, это Fragment то, что удерживает RecyclerView от androidx. Так что же мне теперь здесь делать?