在 ViewPager2 中使用时,ExoPlayer media3 中的 PlayerView 相互重叠?

问题描述 投票:0回答:2

我有水平视图 ViewPager2,其中有 2 种类型的视图(单独的布局)图像和视频。 我使用了 resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM ,当两个视频彼此相邻时,一个视频与另一个视图重叠。当使用另一种调整大小模式时,它效果很好,但我需要 RESIZE_MODE_ZOOM。

查看寻呼机:


  <androidx.viewpager2.widget.ViewPager2
                        android:id="@+id/pager"
                        android:layout_width="match_parent"
                        android:layout_height="358dp"
                        android:orientation="horizontal" />

在适配器中:

//.. some code//
    inner class HomePageVimeoViewHolder(private val binding: AppHomepageBoxVimeoItemBinding) :
        RecyclerView.ViewHolder(binding.root) {
//.. some code//

        private lateinit var exoPlayer: ExoPlayer
        @OptIn(UnstableApi::class) private fun initializePlayer(videoUrl: String) {
            exoPlayer = ExoPlayer.Builder(mContext).build().apply {
                val mediaItem = MediaItem.fromUri(Uri.parse(videoUrl))
                setMediaItem(mediaItem)
                prepare()
                playWhenReady = true  // Autoplay when the player is ready
                repeatMode = Player.REPEAT_MODE_ALL
                volume = 0f
            }
            binding.videoView.apply {
                player = exoPlayer
                useController = false  // Disable the ExoPlayer controls
                resizeMode = AspectRatioFrameLayout.RESIZE_MODE_ZOOM // Adjust this based on need
            }
        }
//.. some code//
}

片段:

//.. some code//
    private fun setupViewPager() {
        homePageAdapter = HomePageAdapter(requireContext(), homePageBoxes)
        homePageAdapter.setOnItemClickListener(this)

        binding.pager.offscreenPageLimit = 2
        binding.pager.adapter = homePageAdapter
        binding.indicator.attachTo(binding.pager)

        // Initialize HorizontalSwipeViewPager2 with our ViewPager2 instance
        HorizontalSwipeViewPager2(binding.pager, requireContext())
    }
//.. some code//

梯度:

//.. some code//
    implementation 'androidx.media3:media3-exoplayer:1.2.0'
    implementation 'androidx.media3:media3-ui:1.2.0'
//.. some code//
android kotlin mobile exoplayer android-media3
2个回答
0
投票

自定义 ViewPager2 PageTransformer。

为 ViewPager2 实现自定义 PageTransformer 来管理项目的转换和间距。调整转换器内的平移值或比例以避免重叠。

viewPager2.setPageTransformer { page, position ->
val normalizedPosition = Math.abs(Math.abs(position) - 1)
page.scaleY = normalizedPosition / 2 + 0.5f
}

请尝试上面的解决方案,它对我有用......


0
投票

确保使用TextureView:

<androidx.media3.ui.PlayerView 
    app:surface_type="texture_view" />
© www.soinside.com 2019 - 2024. All rights reserved.