Android ViewPager2,上一项和下一项变暗处理

标签 android android-viewpager android-jetpack android-viewpager2 android-pagetransformer

enter image description here

如上图所示,我想使 ViewPager2 中的上一个和下一个项目变暗。

setPageTransformer(object : ViewPager2.PageTransformer {
            override fun transformPage(page: View, position: Float) {
                page.translationX = -pageTranslationX * position
                page.scaleY = 1 - (0.15f * abs(position))
            }
        })

我使用上面的代码 fragment 显示预览,但我找不到将其变暗的方法。

有什么好的解决办法吗?

最佳答案

您可以利用映射到页面当前位置的position参数来获取基于页面位置的颜色阴影;这也有利于在最暗和最亮的颜色之间分级颜色,以便颜色逐渐变化:

  • 为浅色和深色创建两种颜色资源
  • 使用 ColorUtils.blendARGB() 获取基于位置百分比的颜色。
  • 将新的背景颜色设置为页面的 Root View
setPageTransformer(object : ViewPager2.PageTransformer {
        override fun transformPage(page: View, position: Float) {
            page.translationX = -pageTranslationX * position
            page.scaleY = 1 - (0.15f * abs(position))
            
            val startColor = ContextCompat.getColor(this, R.color.light_blue)
            val endColor = ContextCompat.getColor(this, R.color.dark_blue)
            val color = ColorUtils.blendARGB(startColor, endColor, abs(position))
            val view = page.findViewById<LinearLayout>(R.id.page_root) //  this is the page fragment root view (make sure to set its id)
            view?.setBackgroundColor(color)
            
        }
    })

结果:

关于Android ViewPager2,上一项和下一项变暗处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71246467/

相关文章:

android - 使用 Python 和 jnius 在 Android 上显示 Toast 时出错

android - 如何使用 View 绑定(bind)制作 BaseFragment

kotlin - 使用 Jetpack Compose 仅​​将可组合项拖动到给定边界内

java - 带有 4 个项目的 GridView android

android - 椭圆 Ice Cream Sandwich 添加[

android - ViewPager中Fragment来到屏幕时的方法

android - 从下一个屏幕返回时 ViewPager 数据丢失

android - 我应该在使用 viewModel 时添加 binding.lifecycleOwner=this 吗?

Android 在主线程上跳帧过多

android 在所有 Activity 前保持一个 View