【发布时间】:2019-08-12 12:19:24
【问题描述】:
我试图在我的应用中实现用户向下滚动的效果,视图的不透明度将从 0 变为 1。
为了实现这一点,我用我想要的颜色蓝色创建了一个 ColorDrawable,然后将其 alpha 设置为 0。
val actionBarBackground = ColorDrawable(ContextCompat.getColor(it, R.color.myBlue))
(activity as? AppCompatActivity)?.supportActionBar?.setBackgroundDrawable(actionBarBackground)
但是,增加 alpha 后,它并没有改变。我已经尝试打印 actionBarBackground 的值,但它仍然是 0...
// This is called inside a scrollview callback that calculates an alpha value between 0 and 255
actionBarBackground.alpha = 255
Log.d(TAG, "Alpha: ${actionBarBackground.alpha}") // Prints: Alpha: 0
任何想法为什么ColorDwarable 的 alpha 不会改变?谢谢。
【问题讨论】:
-
如果你为你正在使用的语言添加标签可能会很好(大概是Kotlin ?)。见ColorDrawable setAlpha。
-
谢谢@JonGoodwin 我已经添加了 Kotlin 标签。看了很多遍的文档,
.setAlpha()函数好像没有改变color drawable中的值。 -
请参阅 kotlin 文档。 mutate 和 invalidateself 和 setAlpha。这在你的问题中看起来是错误的
actionBarBackground.alpha = 255something likeactionBarBackground.setAlpha(255)? -
谢谢乔恩。在 kotlin 中,getter 和 setter 会自动转化为属性,所以 kotlin 中的
.setAlpha(255)就是.alpha = 255。当您使用正常的 setAlpha 时,甚至 Android Studio 也建议进行此更改。但是,您对.mutate()的看法是正确的。使用它,并用返回的变异 Drawable 替换我的 ColorDrawable,alpha 更改工作正常。感谢您的帮助!
标签: android kotlin alpha colordrawable