QML中不使用color属性能否实现颜色变化动画?
实现SVG填充色的ColorAnimation动画
当然可以用ColorAnimation实现你的需求,以下两种方案都能满足:
方案一:直接对字符串类型的color属性动画
ColorAnimation支持直接作用于字符串类型的颜色属性,它会自动将动画过程中的颜色值转换为XML兼容的格式(如#RRGGBBAA)赋值给你的color属性,无需额外处理:
property string color: "aliceblue" ColorAnimation on color { from: "aliceblue" to: "#6495ED" // cornflowerblue的十六进制表示 duration: 1000 loops: Animation.Infinite }
动画运行时,color属性会持续更新为符合SVG fill要求的颜色字符串,直接传入svg from string函数即可。
方案二:改用原生color类型属性(更推荐)
将属性类型改为QML原生的color,ColorAnimation的适配会更精准,使用时再转换为字符串格式传给SVG函数:
property color svgFillColor: "aliceblue" ColorAnimation on svgFillColor { from: "aliceblue" to: "cornflowerblue" duration: 1000 } // 调用svg from string函数时转换为字符串 function generateSvg() { let fillColor = svgFillColor.toString(); // 自动转为#RRGGBBAA格式 // 这里传入fillColor到svg from string函数 }
这种方式利用了原生color类型的颜色处理能力,动画过渡更平滑,也能避免字符串格式的潜在问题。
内容的提问来源于stack exchange,提问作者ephemera
相关产品推荐
相关产品推荐

