我有一个函数可以在我的背景上创建一个渐变MainActivity
。渐变以编程方式创建为GradientDrawable
. App 中的某些交互会改变渐变的颜色。
渐变和颜色已正确显示,并且它们确实会相应更改,但是,我希望对颜色更改进行过渡效果。现在,颜色立即过渡,没有交叉淡入淡出。
fun createGradient() {
gd.shape = GradientDrawable.RECTANGLE
mainActivityID.background = gd
gd.gradientType = GradientDrawable.LINEAR_GRADIENT
gd.orientation = (GradientDrawable.Orientation.BL_TR)
}
根据App中的交互,我用一个when
语句来改变颜色GradientDrawable
fun changeGradient(){
//val td = gd as TransitionDrawable
//td.isCrossFadeEnabled = true
//td.startTransition(1500)
when(calories){
in 0..50 -> gd.colors = intArrayOf(
ContextCompat.getColor(this, R.color.dBlue),
ContextCompat.getColor(this, R.color.lBlue)
)
in 51..100 -> gd.colors = intArrayOf(
ContextCompat.getColor(this, R.color.dRed),
ContextCompat.getColor(this, R.color.lRed)
)
// etc...
}
}
我尝试将 GradientDrawable 转换为 TransitionDrawable (如上面注释的代码中所示),但崩溃与:
java.lang.ClassCastException: android.graphics.drawable.GradientDrawable 不能转换为 android.graphics.drawable.TransitionDrawable
如何在 GradientDrawable 颜色变化之间添加 1500 毫秒的过渡?
进度崩溃java.lang.NegativeArraySizeException: -16777216
when(calories){
in 0..50 -> animateGradient(gd, IntArray(Color.BLACK), IntArray(Color.CYAN))
in 51..100 -> animateGradient(gd, IntArray(Color.RED), IntArray(Color.BLUE))
in 101..150 -> animateGradient(gd, IntArray(Color.GREEN), IntArray(Color.YELLOW))
// etc... about 15 more statements.
}