You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native中使用Reanimated2实现StrokeDasharray动画?

错误根因

strokeDasharray 属于SVG的多值属性,原生要求接收数组格式的参数,而你当前代码直接向该属性传递了单个数值类型的动画值,原生层解析时尝试将Double类型强转为数组类型,直接触发类型转换异常。你之前在strokeDashoffset场景下运行正常,是因为strokeDashoffset本身就是单值属性,不存在类型匹配问题。

修复方案

根据你values.dash的实际格式调整即可:

场景1:values.dash本身就是虚线配置数组(如[实线长度, 间隔长度])

只需调整共享值的赋值逻辑,确保动画作用于数组整体即可:

// 初始化直接用数组赋值
const dashArray = useSharedValue(values.dash);

const rDash = useAnimatedStyle(() => {
  return {
    strokeDasharray: dashArray.value
  }
})

useAnimatedReaction(
  () => values.dash, // 直接监听dash值减少不必要的触发
  (newDash) => {
      dashArray.value = withSpring(newDash)
  },
  [values.dash]
)

场景2:values.dash是单个数字,需要等长实线和间隔的虚线效果

将单值包裹为[dash值, dash值]格式的数组即可:

// 初始化就转成数组格式
const dashArray = useSharedValue([values.dash, values.dash]);

const rDash = useAnimatedStyle(() => {
  return {
    strokeDasharray: dashArray.value
  }
})

useAnimatedReaction(
  () => values.dash,
  (newDash) => {
      dashArray.value = withSpring([newDash, newDash])
  },
  [values.dash]
)

如果需要实线段和间隔长度不同,直接修改数组第二个参数即可,比如[newDash, 2]就代表实线长度为dash值,间隔固定为2像素。

内容的提问来源于stack exchange,提问作者Laxman Deadpool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:24:02