kotlin 如何在compose中使用AndroidView上新的onReset重载来重用VerticalPager中的ExoPlayer

x33g5p2x  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(166)

我想在Jetpack中的AndroidView中使用ExoPlayer,在VerticalPager中编写,并使用AndroidView上新的onReset功能来重用exoplayer视图。
文档说它被各种LazyList支持,但没有说VerticalPager/HorizontalPager。
由于这是一个非常新的特性,文档似乎很少。

AndroidView(
     factory = {
          Logger.d { "PlayerView factory created" }
          PlayerView(context).apply {
              hideController()
              useController = false
              player = exoPlayer
              resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM
              layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)
              clipToOutline = true
          }
       },
       onReset = {
           Logger.d { "" }
           (it.player as ExoPlayer).apply {
               val defaultDataSourceFactor = DefaultDataSource.Factory(context)
               val dataSourceFactory: DataSource.Factory = DefaultDataSource.Factory(
                            context,
                            defaultDataSourceFactor
                        )
               val source = ProgressiveMediaSource.Factory(dataSourceFactory)
                            .createMediaSource(MediaItem.fromUri(video.url))
               setMediaSource(source)
               repeatMode = REPEAT_MODE_ONE
               prepare()
            }
        },
        onRelease = {
            Logger.d { "PlayerView factory released" }
        }
)

但这只是给我出了内存错误。
我该怎么做才能让它工作?

8dtrkrch

8dtrkrch1#

重用也可以在寻呼机中工作
我不知道你试图在onReset块中做什么,在onReset中,你应该重置以前播放的活动视频,因为以前的内容不再与此视图相关联。您需要在更新块内启动视频播放-另一个参数AndroidView有

相关问题