我有水平视图 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//
自定义 ViewPager2 PageTransformer。
为 ViewPager2 实现自定义 PageTransformer 来管理项目的转换和间距。调整转换器内的平移值或比例以避免重叠。
viewPager2.setPageTransformer { page, position ->
val normalizedPosition = Math.abs(Math.abs(position) - 1)
page.scaleY = normalizedPosition / 2 + 0.5f
}
请尝试上面的解决方案,它对我有用......
确保使用TextureView:
<androidx.media3.ui.PlayerView
app:surface_type="texture_view" />