# @ohos.curves (æ’值计算) 本模å—æ供设置动画æ’å€¼æ›²çº¿åŠŸèƒ½ï¼Œç”¨äºŽæž„é€ é˜¶æ¢¯æ›²çº¿å¯¹è±¡ã€æž„é€ ä¸‰é˜¶è´å¡žå°”æ›²çº¿å¯¹è±¡å’Œæž„é€ å¼¹ç°§æ›²çº¿å¯¹è±¡ã€‚ > **说明:** > > 本模å—首批接å£ä»ŽAPI Version 7开始支æŒã€‚åŽç»ç‰ˆæœ¬å¦‚æœ‰æ–°å¢žå†…å®¹ï¼Œåˆ™é‡‡ç”¨ä¸Šè§’æ ‡å•ç‹¬æ ‡è®°è¯¥å†…容的起始版本。 ## å¯¼å…¥æ¨¡å— ```ts import { curves } from '@kit.ArkUI'; ``` ## Curves.initCurve<sup>9+</sup> initCurve(curve?: Curve): ICurve æ’值曲线的åˆå§‹åŒ–函数,å¯ä»¥æ ¹æ®å…¥å‚创建一个æ’值曲线对象。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------ | --------------- | ---- | ----------------------------------- | | curve | [Curve](#curve枚举说明) | å¦ | 曲线类型。<br/>默认值:Curve.Linear | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线的æ’值对象。 | ## Curve枚举说明 æ’值曲线,动效请å‚考<!--RP1-->[è´å¡žå°”曲线](../../../design/ux-design/animation-attributes.md)<!--RP1End-->。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full | å称 | 说明 | | ------------------- | ------------------------------------------------------------ | | Linear | 表示动画从头到尾的速度都是相åŒçš„。 | | Ease | 表示动画以低速开始,然åŽåŠ 快,在结æŸå‰å˜æ…¢ï¼Œcubic-bezier(0.25, 0.1, 0.25, 1.0)。 | | EaseIn | 表示动画以低速开始,cubic-bezier(0.42, 0.0, 1.0, 1.0)。 | | EaseOut | 表示动画以低速结æŸï¼Œcubic-bezier(0.0, 0.0, 0.58, 1.0)。 | | EaseInOut | 表示动画以低速开始和结æŸï¼Œcubic-bezier(0.42, 0.0, 0.58, 1.0)。 | | FastOutSlowIn | æ ‡å‡†æ›²çº¿ï¼Œcubic-bezier(0.4, 0.0, 0.2, 1.0)。 | | LinearOutSlowIn | å‡é€Ÿæ›²çº¿ï¼Œcubic-bezier(0.0, 0.0, 0.2, 1.0)。 | | FastOutLinearIn | åŠ é€Ÿæ›²çº¿ï¼Œcubic-bezier(0.4, 0.0, 1.0, 1.0)。 | | ExtremeDeceleration | 急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。 | | Sharp | é”利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。 | | Rhythm | 节å¥æ›²çº¿ï¼Œcubic-bezier(0.7, 0.0, 0.2, 1.0)。 | | Smooth | 平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。 | | Friction | 阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。 | **示例:** ```ts import { curves } from '@kit.ArkUI'; curves.initCurve(Curve.EaseIn) // 创建一个默认先慢åŽå¿«æ’值曲线 ``` ##  Curves.stepsCurve<sup>9+</sup> stepsCurve(count: number, end: boolean): ICurve æž„é€ é˜¶æ¢¯æ›²çº¿å¯¹è±¡ã€‚ **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------ | ------- | ----| ------------------------------------------------------------ | | count | number | 是 | 阶梯的数é‡ï¼Œéœ€è¦ä¸ºæ£æ•´æ•°ã€‚<br/>å–值范围:[1, +∞)<br/>**说明:** <br/>设置å°äºŽ1的值时,按值为1处ç†ã€‚ | | end | boolean | 是 | 在æ¯ä¸ªé—´éš”的起点或是终点å‘生阶跃å˜åŒ–。<br>-true:在终点å‘生阶跃å˜åŒ–。<br>-false:在起点å‘生阶跃å˜åŒ–。 | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线的æ’值对象。 | **示例:** ```ts import { curves } from '@kit.ArkUI'; curves.stepsCurve(9, true) //创建一个阶梯曲线 ``` ## Curves.cubicBezierCurve<sup>9+</sup> cubicBezierCurve(x1: number, y1: number, x2: number, y2: number): ICurve æž„é€ ä¸‰é˜¶è´å¡žå°”曲线对象,曲线的值必须处于0-1之间。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------ | ------ | ---- | ------------------------------------------------------------ | | x1 | number | 是 | 确定è´å¡žå°”曲线第一点横åæ ‡ã€‚<br/>å–值范围:[0, 1]<br/>**说明:** <br/>设置的值å°äºŽ0时,按0处ç†ï¼›è®¾ç½®çš„值大于1时,按1处ç†ã€‚ | | y1 | number | 是 | 确定è´å¡žå°”曲线第一点纵åæ ‡ã€‚<br/>å–值范围:(-∞, +∞) | | x2 | number | 是 | 确定è´å¡žå°”曲线第二点横åæ ‡ã€‚<br/>å–值范围:[0, 1]<br/>**说明:** <br/>设置的值å°äºŽ0时,按0处ç†ï¼›è®¾ç½®çš„值大于1时,按1处ç†ã€‚ | | y2 | number | 是 | 确定è´å¡žå°”曲线第二点纵åæ ‡ã€‚<br/>å–值范围:(-∞, +∞) | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线的æ’值对象。 | **示例:** ```ts import { curves } from '@kit.ArkUI'; curves.cubicBezierCurve(0.1, 0.0, 0.1, 1.0) // 创建一个三阶è´å¡žå°”曲线 ``` ##  Curves.springCurve<sup>9+</sup> springCurve(velocity: number, mass: number, stiffness: number, damping: number): ICurve æž„é€ å¼¹ç°§æ›²çº¿å¯¹è±¡ï¼Œæ›²çº¿å½¢çŠ¶ç”±å¼¹ç°§å‚数决定,动画时长å—animationã€animateToä¸çš„durationå‚数控制。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | --------- | ------ | ---- | ------------------------------------------------------------ | | velocity | number | 是 | åˆå§‹é€Ÿåº¦ã€‚æ˜¯ç”±å¤–éƒ¨å› ç´ å¯¹å¼¹æ€§åŠ¨æ•ˆäº§ç”Ÿçš„å½±å“å‚数,其目的是ä¿è¯å¯¹è±¡ä»Žä¹‹å‰çš„è¿åŠ¨çŠ¶æ€å¹³æ»‘的过渡到弹性动效。该速度是归一化速度,其值ç‰äºŽåŠ¨ç”»å¼€å§‹æ—¶çš„实际速度除以动画属性改å˜å€¼ã€‚<br/>å–值范围:(-∞, +∞) | | mass | number | 是 | è´¨é‡ã€‚弹性系统的å—力对象,会对弹性系统产生惯性影å“。质é‡è¶Šå¤§ï¼Œéœ‡è¡çš„幅度越大,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度越慢。<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | | stiffness | number | 是 | åˆšåº¦ã€‚æ˜¯ç‰©ä½“æŠµæŠ—æ–½åŠ çš„åŠ›è€Œå½¢å˜çš„程度。在弹性系统ä¸ï¼Œåˆšåº¦è¶Šå¤§ï¼ŒæŠµæŠ—å˜å½¢çš„能力越强,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度就越快。<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | | damping | number | 是 | 阻尼。用于æ述系统在å—到扰动åŽéœ‡è¡åŠè¡°å‡çš„情形。阻尼越大,弹性è¿åŠ¨çš„震è¡æ¬¡æ•°è¶Šå°‘ã€éœ‡è¡å¹…度越å°ã€‚<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线的æ’值对象。 | **示例:** ```ts import { curves } from '@kit.ArkUI'; curves.springCurve(10, 1, 228, 30) // 创建一个弹簧æ’值曲线 ``` ##  Curves.springMotion<sup>9+</sup> springMotion(response?: number, dampingFraction?: number, overlapDuration?: number): ICurve æž„é€ å¼¹æ€§åŠ¨ç”»æ›²çº¿å¯¹è±¡ã€‚å¦‚æžœå¯¹åŒä¸€å¯¹è±¡çš„åŒä¸€å±žæ€§è¿›è¡Œå¤šä¸ªå¼¹æ€§åŠ¨ç”»ï¼Œæ¯ä¸ªåŠ¨ç”»ä¼šæ›¿æ¢æŽ‰å‰ä¸€ä¸ªåŠ¨ç”»ï¼Œå¹¶ç»§æ‰¿ä¹‹å‰çš„速度。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | --------- | ------ | ---- | ----- | | response | number | å¦ | 弹簧自然振动周期,决定弹簧å¤ä½çš„速度。<br>默认值:0.55<br/>å•ä½ï¼šç§’<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置å°äºŽç‰äºŽ0的值时,按默认值0.55处ç†ã€‚ | | dampingFraction | number | å¦ | 阻尼系数。<br>0è¡¨ç¤ºæ— é˜»å°¼ï¼Œä¸€ç›´å¤„äºŽéœ‡è¡çŠ¶æ€ï¼›<br>大于0å°äºŽ1çš„å€¼ä¸ºæ¬ é˜»å°¼ï¼Œè¿åŠ¨è¿‡ç¨‹ä¸ä¼šè¶…å‡ºç›®æ ‡å€¼ï¼›<br>ç‰äºŽ1为临界阻尼;<br>大于1为过阻尼,è¿åŠ¨è¿‡ç¨‹ä¸é€æ¸è¶‹äºŽç›®æ ‡å€¼ã€‚<br>默认值:0.825<br/>å•ä½ï¼šç§’<br/>å–值范围:[0, +∞)<br/>**说明:** <br/>设置å°äºŽ0的值时,按默认值0.825处ç†ã€‚ | | overlapDuration | number | å¦ | 弹性动画衔接时长。å‘生动画继承时,如果å‰åŽä¸¤ä¸ªå¼¹æ€§åŠ¨ç”»responseä¸ä¸€è‡´ï¼Œresponseå‚数会在overlapDuration时间内平滑过渡。<br/>默认值:0<br/>å•ä½ï¼šç§’<br/>å–值范围:[0, +∞)<br/> **说明:** <br/>设置å°äºŽ0的值时,按默认值0处ç†ã€‚<br>弹性动画曲线为物ç†æ›²çº¿ï¼Œ[animation](arkui-ts/ts-animatorproperty.md)ã€[animateTo](arkui-ts/ts-explicit-animation.md)ã€[pageTransition](arkui-ts/ts-page-transition-animation.md)ä¸çš„durationå‚æ•°ä¸ç”Ÿæ•ˆï¼ŒåŠ¨ç”»æŒç»æ—¶é—´å–决于springMotion动画曲线å‚数和之å‰çš„速度。时间ä¸èƒ½å½’一,故ä¸èƒ½é€šè¿‡è¯¥æ›²çº¿çš„interpolate函数获得æ’值。 | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线对象。<br>**说明:** <br>弹性动画曲线为物ç†æ›²çº¿ï¼Œ[animation](arkui-ts/ts-animatorproperty.md)ã€[animateTo](arkui-ts/ts-explicit-animation.md)ã€[pageTransition](arkui-ts/ts-page-transition-animation.md)ä¸çš„durationå‚æ•°ä¸ç”Ÿæ•ˆï¼ŒåŠ¨ç”»æŒç»æ—¶é—´å–决于springMotion动画曲线å‚数和之å‰çš„速度。时间ä¸èƒ½å½’一,故ä¸èƒ½é€šè¿‡è¯¥æ›²çº¿çš„[interpolate](#interpolate9)函数获得æ’值。 | **示例:** ```ts import { curves } from '@kit.ArkUI' curves.springMotion() // 创建一个默认弹性动画曲线 curves.springMotion(0.5) // 创建指定responseã€å…¶ä½™å‚数默认的弹性动画曲线 curves.springMotion(0.5, 0.6) // 创建指定responseå’ŒdampingFractionã€å…¶ä½™å‚数默认的弹性动画曲线 curves.springMotion(0.5, 0.6, 0) // 创建三个å‚æ•°å‡è‡ªå®šä¹‰çš„弹性动画曲线 ``` ##  Curves.responsiveSpringMotion<sup>9+</sup> responsiveSpringMotion(response?: number, dampingFraction?: number, overlapDuration?: number): ICurve æž„é€ å¼¹æ€§è·Ÿæ‰‹åŠ¨ç”»æ›²çº¿å¯¹è±¡ï¼Œæ˜¯[springMotion](#curvesspringmotion9)的一ç§ç‰¹ä¾‹ï¼Œä»…默认å‚æ•°ä¸åŒï¼Œå¯ä¸ŽspringMotionæ··åˆä½¿ç”¨ã€‚ **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | --------- | ------ | ---- | ----- | | response | number | å¦ | 解释åŒspringMotionä¸çš„response。<br/>默认值:0.15<br/>å•ä½ï¼šç§’<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置å°äºŽç‰äºŽ0的值时,按默认值0.15处ç†ã€‚ | | dampingFraction | number | å¦ | 解释åŒspringMotionä¸çš„dampingFraction。<br/>默认值:0.86<br/>å•ä½ï¼šç§’<br/>å–值范围:[0, +∞)<br/>**说明:** <br/>设置å°äºŽ0的值时,按默认值0.86处ç†ã€‚ | | overlapDuration | number | å¦ | 解释åŒspringMotionä¸çš„overlapDuration。<br/>默认值:0.25<br/>å•ä½ï¼šç§’<br/>å–值范围:[0, +∞)<br/>**说明:** <br/>设置å°äºŽ0的值时,按默认值0.25处ç†ã€‚<br/>弹性跟手动画曲线为springMotion的一ç§ç‰¹ä¾‹ï¼Œä»…默认值ä¸åŒã€‚如果使用自定义å‚数的弹性曲线,推è使用springMotionæž„é€ æ›²çº¿ã€‚å¦‚æžœä½¿ç”¨è·Ÿæ‰‹åŠ¨ç”»ï¼ŒæŽ¨è使用默认å‚数的弹性跟手动画曲线。<br/>[animation](arkui-ts/ts-animatorproperty.md)ã€[animateTo](arkui-ts/ts-explicit-animation.md)ã€[pageTransition](arkui-ts/ts-page-transition-animation.md)ä¸çš„durationå‚æ•°ä¸ç”Ÿæ•ˆï¼ŒåŠ¨ç”»æŒç»æ—¶é—´å–决于responsiveSpringMotion动画曲线å‚数和之å‰çš„速度,也ä¸èƒ½é€šè¿‡è¯¥æ›²çº¿çš„interpolate函数获得æ’值。 | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线对象。<br>**说明:** <br>1ã€å¼¹æ€§è·Ÿæ‰‹åŠ¨ç”»æ›²çº¿ä¸ºspringMotion的一ç§ç‰¹ä¾‹ï¼Œä»…默认值ä¸åŒã€‚如果使用自定义å‚数的弹性曲线,推è使用springMotionæž„é€ æ›²çº¿ï¼›å¦‚æžœä½¿ç”¨è·Ÿæ‰‹åŠ¨ç”»ï¼ŒæŽ¨è使用默认å‚数的弹性跟手动画曲线。<br>2ã€[animation](arkui-ts/ts-animatorproperty.md)ã€[animateTo](arkui-ts/ts-explicit-animation.md)ã€[pageTransition](arkui-ts/ts-page-transition-animation.md)ä¸çš„durationå‚æ•°ä¸ç”Ÿæ•ˆï¼ŒåŠ¨ç”»æŒç»æ—¶é—´å–决于responsiveSpringMotion动画曲线å‚数和之å‰çš„速度,也ä¸èƒ½é€šè¿‡è¯¥æ›²çº¿çš„[interpolate](#interpolate9)函数获得æ’值。 | **示例:** ```ts import { curves } from '@kit.ArkUI' curves.responsiveSpringMotion() // 创建一个默认弹性跟手动画曲线 ``` ##  Curves.interpolatingSpring<sup>10+</sup> interpolatingSpring(velocity: number, mass: number, stiffness: number, damping: number): ICurve æž„é€ æ’值器弹簧曲线对象,生æˆä¸€æ¡ä»Ž0到1çš„åŠ¨ç”»æ›²çº¿ï¼Œå®žé™…åŠ¨ç”»å€¼æ ¹æ®æ›²çº¿è¿›è¡Œæ’值计算。动画时间由曲线å‚数决定,ä¸å—animationã€animateToä¸çš„durationå‚数控制。 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | --------- | ------ | ---- | ----- | | velocity | number | 是 | åˆå§‹é€Ÿåº¦ã€‚å¤–éƒ¨å› ç´ å¯¹å¼¹æ€§åŠ¨æ•ˆäº§ç”Ÿçš„å½±å“å‚数,目的是ä¿è¯å¯¹è±¡ä»Žä¹‹å‰çš„è¿åŠ¨çŠ¶æ€å¹³æ»‘地过渡到弹性动效。该速度是归一化速度,其值ç‰äºŽåŠ¨ç”»å¼€å§‹æ—¶çš„实际速度除以动画属性改å˜å€¼ã€‚<br/>å–值范围:(-∞, +∞) | | mass | number | 是 | è´¨é‡ã€‚弹性系统的å—力对象,会对弹性系统产生惯性影å“。质é‡è¶Šå¤§ï¼Œéœ‡è¡çš„幅度越大,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度越慢。<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | | stiffness | number | 是 | åˆšåº¦ã€‚è¡¨ç¤ºç‰©ä½“æŠµæŠ—æ–½åŠ çš„åŠ›è€Œå½¢å˜çš„程度。刚度越大,抵抗å˜å½¢çš„能力越强,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度越快。<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | | damping | number | 是 | 阻尼。用于æ述系统在å—到扰动åŽéœ‡è¡åŠè¡°å‡çš„情形。阻尼越大,弹性è¿åŠ¨çš„震è¡æ¬¡æ•°è¶Šå°‘ã€éœ‡è¡å¹…度越å°ã€‚<br/>å–值范围:(0, +∞)<br/>**说明:** <br/>设置的值å°äºŽç‰äºŽ0时,按1处ç†ã€‚ | **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------- | | [ICurve](#icurve9) | 曲线对象。<br>**说明:** 弹性动画曲线为物ç†æ›²çº¿ï¼Œ[animation](arkui-ts/ts-animatorproperty.md)ã€[animateTo](arkui-ts/ts-explicit-animation.md)ã€[pageTransition](arkui-ts/ts-page-transition-animation.md)ä¸çš„durationå‚æ•°ä¸ç”Ÿæ•ˆï¼ŒåŠ¨ç”»æŒç»æ—¶é—´å–决于interpolatingSpring动画曲线å‚数。时间ä¸èƒ½å½’一,故ä¸èƒ½é€šè¿‡è¯¥æ›²çº¿çš„[interpolate](#interpolate9)函数获得æ’值。 | **示例:** ```ts import { curves } from '@kit.ArkUI' curves.interpolatingSpring(10, 1, 228, 30) // 创建一个时长由弹簧å‚数决定的弹簧æ’值曲线 ``` ## Curves.customCurve<sup>10+</sup> customCurve(interpolate: (fraction: number) => number): ICurve æž„é€ è‡ªå®šä¹‰æ›²çº¿å¯¹è±¡ã€‚ **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ----------- | ---------------------------- | ---- | ------------------------------------------------------------ | | interpolate | (fraction: number) => number | 是 | 用户自定义的æ’值回调函数。<br/>fraction为动画开始时的æ’值输入x值。å–值范围:[0,1]<br/>返回值为曲线的y值。å–值范围:[0,1]<br />**说明:**<br />fractionç‰äºŽ0时,返回值为0对应动画起点,返回ä¸ä¸º0,动画在起点处有跳å˜æ•ˆæžœã€‚<br/>fractionç‰äºŽ1时,返回值为1对应动画终点,返回值ä¸ä¸º1将导致动画的终值ä¸æ˜¯çŠ¶æ€å˜é‡çš„值,出现大于或者å°äºŽçŠ¶æ€å˜é‡å€¼ï¼Œå†è·³å˜åˆ°çŠ¶æ€å˜é‡å€¼çš„效果。 | **返回值:** | 类型 | 说明 | | ------------------ | ---------------- | | [ICurve](#icurve9) | 曲线的æ’值对象。 | **示例:** ```ts import { curves } from '@kit.ArkUI' let interpolate = (fraction:number):number => { return Math.sqrt(fraction) } let curve = curves.customCurve(interpolate) // 创建一个用户自定义æ’值曲线 ``` ## ICurve<sup>9+</sup> 曲线对象。 ### interpolate<sup>9+</sup> interpolate(fraction: number): number æ’值曲线的æ’值计算函数,å¯ä»¥é€šè¿‡ä¼ 入的归一化时间å‚数返回当å‰çš„æ’值 **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | -------- | ------ | ---- | ------------------------------------------------------------ | | fraction | number | 是 | 当å‰çš„归一化时间å‚数。<br/>å–值范围:[0,1]<br/>**说明:** <br/>设置的值å°äºŽ0时,按0处ç†ï¼›è®¾ç½®çš„值大于1时,按1处ç†ã€‚ | **返回值:** | 类型 | 说明 | | ------ | ------------------------------------ | | number | 返回归一化time时间点对应的曲线æ’值。 | **示例:** ```ts import { curves } from '@kit.ArkUI' let curveValue = curves.initCurve(Curve.EaseIn) // 创建一个默认先慢åŽå¿«æ’值曲线 let value: number = curveValue.interpolate(0.5) // 计算得到时间到一åŠæ—¶çš„æ’值 ``` ## Curves.init<sup>(deprecated)</sup> init(curve?: Curve): string æ’值曲线的åˆå§‹åŒ–函数,å¯ä»¥æ ¹æ®å…¥å‚创建一个æ’值曲线对象,从API version9开始废弃,推è使用[Curves.initCurve](#curvesinitcurve9)。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------ | --------------- | ---- | ----------------------------------- | | curve | [Curve](#curve枚举说明) | å¦ | 曲线类型。<br/>默认值:Curve.Linear | ## Curves.steps<sup>(deprecated)</sup> steps(count: number, end: boolean): string æž„é€ é˜¶æ¢¯æ›²çº¿å¯¹è±¡ï¼Œä»ŽAPI version9开始废弃,推è使用[Curves. stepsCurve](#curvesstepscurve9)。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------ | ------- | ----| ------------------------------------------------------------ | | count | number | 是 | 阶梯的数é‡ï¼Œéœ€è¦ä¸ºæ£æ•´æ•°ã€‚ | | end | boolean | 是 | 在æ¯ä¸ªé—´éš”的起点或是终点å‘生阶跃å˜åŒ–。<br>-true:在终点å‘生阶跃å˜åŒ–。<br>-false:在起点å‘生阶跃å˜åŒ–。 | ## Curves.cubicBezier<sup>(deprecated)</sup> cubicBezier(x1: number, y1: number, x2: number, y2: number): string æž„é€ ä¸‰é˜¶è´å¡žå°”曲线对象,曲线的值必须处于0-1之间,API version9开始废弃,推è使用 [Curves.cubicBezierCurve](#curvescubicbeziercurve9)。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ---- | ------ | ---- | -------------- | | x1 | number | 是 | 确定è´å¡žå°”曲线第一点横åæ ‡ã€‚ | | y1 | number | 是 | 确定è´å¡žå°”曲线第一点纵åæ ‡ã€‚ | | x2 | number | 是 | 确定è´å¡žå°”曲线第二点横åæ ‡ã€‚ | | y2 | number | 是 | 确定è´å¡žå°”曲线第二点纵åæ ‡ã€‚ | ## Curves.spring<sup>(deprecated)</sup> spring(velocity: number, mass: number, stiffness: number, damping: number): string æž„é€ å¼¹ç°§æ›²çº¿å¯¹è±¡ï¼Œä»ŽAPI version9开始废弃,推è使用[Curves.springCurve](#curvesspringcurve9)。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | --------- | ------ | ---- | ----- | | velocity | number | 是 | åˆå§‹é€Ÿåº¦ã€‚æ˜¯ç”±å¤–éƒ¨å› ç´ å¯¹å¼¹æ€§åŠ¨æ•ˆäº§ç”Ÿçš„å½±å“å‚数,其目的是ä¿è¯å¯¹è±¡ä»Žä¹‹å‰çš„è¿åŠ¨çŠ¶æ€å¹³æ»‘地过渡到弹性动效。 | | mass | number | 是 | è´¨é‡ã€‚弹性系统的å—力对象,会对弹性系统产生惯性影å“。质é‡è¶Šå¤§ï¼Œéœ‡è¡çš„幅度越大,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度越慢。 | | stiffness | number | 是 | åˆšåº¦ã€‚æ˜¯ç‰©ä½“æŠµæŠ—æ–½åŠ çš„åŠ›è€Œå½¢å˜çš„程度。在弹性系统ä¸ï¼Œåˆšåº¦è¶Šå¤§ï¼ŒæŠµæŠ—å˜å½¢çš„能力越强,æ¢å¤åˆ°å¹³è¡¡ä½ç½®çš„速度就越快。 | | damping | number | 是 | é˜»å°¼ã€‚æ˜¯ä¸€ä¸ªçº¯æ•°ï¼Œæ— çœŸå®žçš„ç‰©ç†æ„义,用于æ述系统在å—到扰动åŽéœ‡è¡åŠè¡°å‡çš„情形。阻尼越大,弹性è¿åŠ¨çš„震è¡æ¬¡æ•°è¶Šå°‘ã€éœ‡è¡å¹…度越å°ã€‚ | ## 整体示例 ```ts // xxx.ets import { curves } from '@kit.ArkUI' @Entry @Component struct ImageComponent { @State widthSize: number = 200 @State heightSize: number = 200 build() { Column() { Text() .margin({ top: 100 }) .width(this.widthSize) .height(this.heightSize) .backgroundColor(Color.Red) .onClick(() => { let curve = curves.cubicBezierCurve(0.25, 0.1, 0.25, 1.0); this.widthSize = curve.interpolate(0.5) * this.widthSize; this.heightSize = curve.interpolate(0.5) * this.heightSize; }) .animation({ duration: 2000, curve: curves.stepsCurve(9, true) }) }.width("100%").height("100%") } } ``` 