ZExoRecyclerPlayer is an Android library that allows developers to easily create RecyclerView with Exoplayer .
Please feel free to use this.
- AutoPlay Video When scroll RecyclerView
- Step 1. Add the JitPack repository to your build file:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Step 2. Add the dependency:
dependencies {
implementation 'com.github.alzoubiMohammed:ZExoRecyclerPlayer:1.2.2'
}
- Step 1. Add singleton Exoplayer and singleton PlayerView like {StyledPlayerView,PlayerControlView....} recommend to use Hilt Like :
@Module()
AppModule {
....
@Provides
fun provideExoplayerInstance(
@ApplicationContext context: Context,
): ExoPlayer {
return ExoPlayer.Builder(context).build()
}
@Singleton
@Provides
fun providePlayerView(
@ApplicationContext context: Context, exoPlayer: ExoPlayer
): StyledPlayerView {
val playerView = StyledPlayerView(context)
playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM
playerView.useController = false
playerView.player = exoPlayer
...
return playerView
}
}
- Step 2. Setup the RecycleView on Fragment Like :
class Fragment{
@Inject
lateinit var exoPlayer: ExoPlayer
@Inject
lateinit var playerView: StyledPlayerView
...
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
...
recyclerView.setupWithExoplayer(
exoPlayer,
playerView,
viewLifecycleOwner
)
}
}
- and on Activity Like :
class Activity{
@Inject
lateinit var exoPlayer: ExoPlayer
@Inject
lateinit var playerView: StyledPlayerView
...
override fun onCreate(savedInstanceState: Bundle?) {
...
recyclerView.setupWithExoplayer(
exoPlayer,
playerView,
this
)
}
}
- Step 3.ViewHolder XML needs to be like :
<androidx.constraintlayout.widget.ConstraintLayout
...
>
<FrameLayout
...
android:id="@+id/videoContainer"
/>
<androidx.appcompat.widget.AppCompatImageView
...
android:id="@+id/videoThumbnail"
/>
<ProgressBar
...
android:id="@+id/videoProgress"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
- Step 4. finally ViewHolder need to implement the VideoPlayerSetup :
- and you can read more about MediaSource
class VideoViewHolder(itemView:View) :
RecyclerView.ViewHolder(itemView), VideoPlayerSetup {
...
fun bind(videoItem:VideoItem){
*important to help ZExoRecyclerPlayer to know are ViewHolder has a video
itemView.tag = this
...
}
override fun videoContainer(): ViewGroup {
return itemView.videoContainer
}
override fun videoProgress(): View {
return itemView.videoProgress
}
override fun videoThumbnail(): ImageView {
return itemView.videoThumbnail
}
override fun attachment(): VideoData {
return VideoData(videoItem.mediaSource,videoItem.currentPosition?:0L)
}
}
This project is licensed under the [MIT License] License - see the LICENSE.md file for details