Kotlin中ValueAnimator子类强转出现ClassCastException问题求助
类型转换异常:ValueAnimator无法转为ColorAnimator的问题解析
你遇到的java.lang.ClassCastException问题,核心是父类实例不能强制转换为子类类型:
ValueAnimator.ofArgb()返回的是系统创建的ValueAnimator父类对象,它本质上并不是你定义的ColorAnimator子类实例- 继承关系里只有子类实例可以向上转型为父类,反过来父类转子类是不允许的,除非父类对象本身就是子类实例
解决方法:自己实现ColorAnimator的Argb创建逻辑
不要试图强转系统返回的ValueAnimator,而是给你的子类添加静态工厂方法,内部创建ColorAnimator实例并配置Argb动画所需的参数:
class ColorAnimator : ValueAnimator() { companion object { // 模仿系统ofArgb的逻辑,返回自定义子类实例 fun ofArgb(color1: Int, color2: Int): ColorAnimator { return ColorAnimator().apply { // 设置颜色值范围 setIntValues(color1, color2) // 设置Argb估值器,这是ofArgb的核心逻辑 setEvaluator(ArgbEvaluator()) } } } override fun start() { // 你的自定义逻辑 super.start() } override fun end() { // 你的自定义逻辑 super.end() } }
然后修改实例化代码,直接调用自定义的工厂方法:
val mAnimator = ColorAnimator.ofArgb(color1, color2).apply { addUpdateListener { btn.background.setTint(it.animatedValue as Int) } duration = 1000 repeatCount = ValueAnimator.INFINITE repeatMode = ValueAnimator.REVERSE } mAnimator.start()
这样就能创建真正的ColorAnimator实例,既保留你重写的start/end逻辑,也能正常实现Argb颜色动画。
内容的提问来源于stack exchange,提问作者Andy Pro
相关产品推荐
相关产品推荐

