package Ġcom . wk z . area _ spline _ chart Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġjava . util .* Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* Ġ@ author Ġw kz Ċ Ġ* Ġ@ desc Ġæ¸ © åº¦ æĽ² çº¿ éĿ¢ ç§¯ åĽ¾ Ċ Ġ* Ġ@ date Ġ 2 0 2 0 - 0 4 - 1 1 Ġ 1 1 : 1 5 Ċ Ġ*/ Ċ class ĠArea Spline Chart View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ æİ§åĪ¶ çĤ¹ ç³» æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Bezier Spline Smooth ness Ġ= Ġ 0 . 2 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¬¬ä¸Ģä¸ª çĤ¹ ï¼ļ è·Ŀç¦» å·¦ è¾¹ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm First Point Margin Left Ġ= Ġdp 2 px ( 3 0 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢåĲİ ä¸Ģä¸ª çĤ¹ ï¼ļ è·Ŀç¦» åı³ è¾¹ çļĦ è·Ŀç¦» ãĢģ Y è½´ çº¿ é¢ľèī² ãĢģ æĸĩåŃĹ çĶ» ç¬Ķ ãĢģ æĸĩåŃĹ å¤§å°ı ãĢģ æĸĩåŃĹ è·Ŀç¦» æľĢåĲİ ä¸Ģä¸ª çĤ¹ çļĦ è·Ŀç¦» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Last Point Margin Right Ġ= Ġdp 2 px ( 3 5 f ) ĊĠĠĠ Ġprivate Ġval Ġm Last Point Y Axis Line Color Ġ= ĠColor . parse Color ("# 9 9 9 9 9 9 ") ĊĠĠĠ Ġprivate Ġval Ġm Last Point Text Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Last Point Text Size Ġ= Ġsp 2 px ( 1 7 f ). toFloat () ĊĠĠĠ Ġprivate Ġval Ġm Last Point Text Margin Left Ġ= Ġsp 2 px ( 8 f ). toFloat () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠXY è½´ çº¿ ï¼ļ çº¿ çĶ» ç¬Ķ ãĢģ çº¿ å®½åº¦ ãĢģ çº¿ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Xy Axis Line Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġm Xy Axis LineWidth Ġ= Ġdp 2 px ( 0 . 5 f ) ĊĠĠĠ Ġprivate Ġvar Ġm Xy Axis Line Color Ġ= ĠColor . parse Color ("# eeee ee ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠX è½´ : Y åĿĲæłĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm X Axis Y Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠY è½´ : æĸĩåŃĹ çĶ» ç¬Ķ ãĢģ æĸĩåŃĹ å¤§å°ı ãĢģ æĸĩåŃĹ é¢ľèī² ãĢģ æĸĩåŃĹ è¾¹ çķĮ ãĢģ æĸĩåŃĹ å®½åº¦ ãĢģ æĸĩåŃĹ é«ĺåº¦ ãĢģ è·Ŀç¦» é¡¶ éĥ¨ çļĦ è·Ŀç¦» ãĢģ åĪ» åº¦ åĪĹè¡¨ ãĢģ åĪ» åº¦ éĹ´ éļĶ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Y Axis Text Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis Text Size Ġ= Ġsp 2 px ( 1 3 f ). toFloat () ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis TextColor Ġ= ĠColor . parse Color ("# 9 9 9 9 9 9 ") ĊĠĠĠ Ġprivate Ġval Ġm Y Axis Text Bounds Ġ= ĠRect () ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis Text Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis Text Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġm Y Axis Margin Top Ġ= Ġdp 2 px ( 1 8 f ) ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis Scale List : ĠMutable List < String > Ġ= ĊĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġm Y Axis Scale Interval Ġ= Ġ 5 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĽ ² çº¿ : çĤ¹ æķ°æį® ãĢģ çĤ¹ åĿĲæłĩ ãĢģ çĶ» ç¬Ķ ãĢģ é¢ľèī² ãĢģ å®½åº¦ ãĢģ éĿ¢ ç§¯ é¢ľèī² ãĢģ è·¯å¾Ħ ãĢģ éĿ¢ ç§¯ è·¯å¾Ħ ãĢģ è¾ ħ åĬ© è·¯å¾Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġtemp List : ĠList < Temp Bean > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġm Second Temp List : ĠList < Temp Bean > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġm First Spline Point List : ĠMutable List < Point > Ġ= ĊĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġm Second Spline Point List : ĠMutable List < Point > Ġ= ĊĠĠĠĠĠĠĠ ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġm First Spline Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Second Spline Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm First Area Spline Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Second Area Spline Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġm First Spline Start Color Ġ= ĠColor . parse Color ("# 1 0 FC AB 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm First Spline Center Color Ġ= ĠColor . parse Color ("# 5 0 FC AB 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm First Spline End Color Ġ= ĠColor . parse Color ("# ff FC AB 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm Second Spline Start Color Ġ= ĠColor . parse Color ("# 1 0 FF 3 F 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm Second Spline Center Color Ġ= ĠColor . parse Color ("# 5 0 FF 3 F 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm Second Spline End Color Ġ= ĠColor . parse Color ("# ff FF 3 F 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġm Spline Width Ġ= Ġ 2 . 5 f ĊĠĠĠ Ġprivate Ġval Ġm First Area Spline Start Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠ Ġprivate Ġval Ġm First Area Spline End Color Ġ= ĠColor . parse Color ("# 4 0 FC AB 0 0 ") ĊĠĠĠ Ġprivate Ġval Ġm Second Area Spline Start Color Ġ= ĠColor . TRANSP ARENT ĊĠĠĠ Ġprivate Ġval Ġm Second Area Spline End Color Ġ= ĠColor . parse Color ("# 4 0 FF 3 F 0 0 ") ĊĠĠĠ Ġprivate Ġval Ġm Spline Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġm Area Spline Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġval Ġm Ass ist Path Ġ= ĠPath () ĊĠĠĠ Ġprivate Ġvar Ġm Path Measure : ĠPath Measure ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĽ ² çº¿ ç»Ī çĤ¹ ï¼ļ çĶ» ç¬Ķ ãĢģ éĽ · è¾¾ æ¶ Ł æ¼ ª çĶ» ç¬Ķ ãĢģ åįĬ å¾Ħ ãĢģ éĽ · è¾¾ æ¶ Ł æ¼ ª æľĢå¤§ åįĬ å¾Ħ ãĢģ éĽ · è¾¾ æ¶ Ł æ¼ ª åįĬ å¾Ħ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġm Spline Destination Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Spline Destination Rad ar R ipple Paint Ġ= ĊĠĠĠĠĠĠĠ ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġval Ġm Spline Destination Radius Ġ= Ġdp 2 px ( 3 . 5 f ) ĊĠĠĠ Ġprivate Ġval Ġm Spline Destination Rad ar R ipple Max Radius Ġ= Ġdp 2 px ( 1 4 . 5 f ) ĊĠĠĠ Ġprivate Ġvar Ġm Spline Destination Rad ar R ipple Radius Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġm Animated Value Ġ= Ġ 0 f ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ» å¸ĥ åİŁ çĤ¹ ï¼ļ X åĿĲæłĩ ãĢģ Y åĿĲæłĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Canvas Origin X Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Canvas Origin Y Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Paint () ĊĠĠĠĠĠĠĠ Ġinit Rad ar R ipple Animator () ĊĠĠĠĠĠĠĠ Ġinit Y Axis Scale List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ çĶ» ç¬Ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Paint () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġm Last Point Text Paint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġm Xy Axis Line Paint . stroke Width Ġ= Ġm Xy Axis LineWidth ĊĠĠĠĠĠĠĠ Ġm First Spline Paint . stroke Width Ġ= Ġm Spline Width ĊĠĠĠĠĠĠĠ Ġm First Spline Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Second Spline Paint . stroke Width Ġ= Ġm Spline Width ĊĠĠĠĠĠĠĠ Ġm Second Spline Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm First Area Spline Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Second Area Spline Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Spline Destination Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Paint . style Ġ= ĠPaint . Style . FILL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĽ · è¾¾ æ¶ Ł æ¼ ª åĬ¨çĶ» ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Rad ar R ipple Animator () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ éĽ · è¾¾ æ¶ Ł æ¼ ª åĬ¨çĶ» ĊĠĠĠĠĠĠĠ Ġval Ġradar R ipple Animator Ġ= ĠValue Animator () ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . set Float Values ( 0 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . repeat Count Ġ= ĠValue Animator . INF IN ITE ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . repeat Mode Ġ= ĠValue Animator . RE START ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Animated Value Ġ= Ġvalue Animator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Radius Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Radius Ġ+ Ġ( m Spline Destination Rad ar R ipple Max Radius Ġ- Ġm Spline Destination Radius ) Ġ* Ġm Animated Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . start Delay Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . duration Ġ= Ġ 1 5 0 0 L ĊĠĠĠĠĠĠĠ Ġradar R ipple Animator . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ Y è½´ åĪ» åº¦ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Y Axis Scale List () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add ("") ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add (" 5 0 Â° ") ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add (" 1 0 0 Â° ") ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add (" 1 5 0 Â° ") ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add (" 2 0 0 Â° ") ĊĠĠĠĠĠĠĠ Ġm Y Axis Scale List . add (" 2 5 0 Â° ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġval Ġy Item Height : ĠFloat Ġ= Ġ(( height Ġ- Ġm Y Axis Margin Top ) Ġ/ Ġm Y Axis Scale List . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ Y è½´ çº¿ åĴĮ åĪ» åº¦ æĸĩåŃĹ ĊĠĠĠĠĠĠĠ Ġdraw Y Axis Line And Scale Text ( canvas , Ġy Item Height ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ç§»åĬ¨ çĶ» å¸ĥ åİŁ çĤ¹ åĪ° ( m Canvas Origin X , Ġm Canvas Origin Y ) ĊĠĠĠĠĠĠĠ Ġm Canvas Origin X Ġ= Ġm First Point Margin Left . toInt () ĊĠĠĠĠĠĠĠ Ġm Canvas Origin Y Ġ= Ġ( height Ġ- Ġ( 3 Ġ* Ġm Y Axis Text Height Ġshr Ġ 1 ) Ġ- Ġm Xy Axis LineWidth ). toInt () ĊĠĠĠĠĠĠĠ Ġcanvas . translate ( m Canvas Origin X . toFloat (), Ġm Canvas Origin Y . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm X Axis Y Ġ-= Ġm Canvas Origin Y . toFloat () ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æĽ² çº¿ çĤ¹ XY åĿĲæłĩ ĊĠĠĠĠĠĠĠ Ġset Spline Point XY () ĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬äºĮ æĿ¡ æĽ² çº¿ ĊĠĠĠĠĠĠĠ Ġdraw Second Spline ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬ä¸Ģ æĿ¡ æĽ² çº¿ ĊĠĠĠĠĠĠĠ Ġdraw First Spline ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// Ġ çĶ» æľĢåĲİ ä¸Ģä¸ª çĤ¹ çļĦ Y è½´ çº¿ ĊĠĠĠĠĠĠĠ Ġinit Last Point Y Axis Line ( canvas , Ġy Item Height ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬ä¸Ģ æĿ¡ æĽ² çº¿ çļĦ ç»Ī çĤ¹ ĊĠĠĠĠĠĠĠ Ġdraw First Spline Destination ( canvas ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬äºĮ æĿ¡ æĽ² çº¿ çļĦ ç»Ī çĤ¹ ĊĠĠĠĠĠĠĠ Ġdraw Second Spline Destination ( canvas ) ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Y Axis Line And Scale Text ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġy Item Height : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ åħĪ çĶ» Y è½´ åĴĮ æ¨ ª çº¿ ĊĠĠĠĠĠĠĠ Ġvar Ġbase Length Str Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( str Ġin Ġm Y Axis Scale List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . length Ġ> Ġbase Length Str . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Length Str Ġ= Ġstr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . color Ġ= Ġm Y Axis TextColor ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . text Size Ġ= Ġm Y Axis Text Size ĊĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . type face Ġ= ĠResources Compat . getFont ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . font . din next l tp ro _ light _ fixed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . getText Bounds ( base Length Str , Ġ 0 , Ġbase Length Str . length , Ġm Y Axis Text Bounds ) ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Width Ġ= Ġm Y Axis Text Bounds . width () ĊĠĠĠĠĠĠĠ Ġm Y Axis Text Height Ġ= Ġm Y Axis Text Bounds . height () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Y Axis Scale List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» Y è½´ æĸĩåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġm Y Axis Scale List [ m Y Axis Scale List . size Ġ- Ġi Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Text Paint . getText Bounds ( text , Ġ 0 , Ġtext . length , Ġtext Bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Item Height Ġ* Ġi Ġ+ Ġy Item Height Ġ- Ġm Y Axis Text Height Ġ+ Ġm Y Axis Margin Top ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġm Y Axis Scale List . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X Axis Y Ġ= Ġtop Y Ġ+ Ġ( m Y Axis Text Height Ġshr Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Line Ġ= Ġmeasure Base Line ( m Y Axis Text Paint , Ġtext , Ġtop Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Y Axis Text Width Ġ- Ġtext Bounds . width () Ġshr Ġ 1 . toFloat (). toInt ()). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Line Ġ+ Ġm Y Axis Text Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Text Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» æ¨ ª çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis Line Paint . color Ġ= Ġm Xy Axis Line Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Y Ġ+ Ġ( m Y Axis Text Height Ġshr Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Y Ġ+ Ġ( m Y Axis Text Height Ġshr Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis Line Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĽ² çº¿ çĤ¹ XY åĿĲæłĩ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Spline Point XY () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( temp List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢ å¼Ģå§ĭ çļĦä¸Ģä¸ª çĤ¹ çļĦæĹ¶éĹ´ ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Start Ġ= Ġtemp List [ 0 ]. timestamp ĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢåĲİ ä¸Ģä¸ª çĤ¹ çļĦæĹ¶éĹ´ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp End Ġ= Ġtemp List [ temp List . size Ġ- Ġ 1 ]. timestamp ĊĠĠĠĠĠĠĠ Ġ// Ġ çĤ¹ çļĦæĹ¶éĹ´ å·® ï¼Į åįķä½į ( ç§Ĵ ) ĊĠĠĠĠĠĠĠ Ġval Ġtime Difference Ġ= Ġtime Stamp End Ġ- Ġtimestamp Start ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġ( time Difference Ġ/ Ġtemp List . size ). toFloat () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm First Spline Point List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġtemp List [ i ]. temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġtemp List [ i ]. timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Ġ* Ġ( m Canvas Origin Y Ġ+ Ġm Y Axis Text Height Ġ/ Ġ 2 ) Ġ/ Ġ( m Y Axis Scale Interval Ġ* Ġm Y Axis Scale List . size )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( timestamp Ġ- Ġtimestamp Start ) Ġ* Ġ( width Ġ- Ġm Canvas Origin X Ġ- Ġm Last Point Margin Right ) Ġ* Ġscale Ġ/ Ġtime Difference ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġm First Spline Point List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint [ x ] Ġ= Ġ- y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Second Spline Point List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġm Second Temp List [ i ]. temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġm Second Temp List [ i ]. timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( temp Ġ* Ġ( m Canvas Origin Y Ġ+ Ġm Y Axis Text Height Ġ/ Ġ 2 ) Ġ/ Ġ( m Y Axis Scale Interval Ġ* Ġm Y Axis Scale List . size )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( timestamp Ġ- Ġtimestamp Start ) Ġ* Ġ( width Ġ- Ġm Canvas Origin X Ġ- Ġm Last Point Margin Right ) Ġ* Ġscale Ġ/ Ġtime Difference ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġm Second Spline Point List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint [ x ] Ġ= Ġ- y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ ç¬¬äºĮ æĿ¡ æĽ² çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Second Spline ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Second Spline Point List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Second Point Ġ= Ġm Second Spline Point List [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Second Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Point List [ m Second Spline Point List . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Path ( m Second Spline Point List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst 2 Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst 2 . r Line To ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance 2 Ġ= Ġm Path Measure !!. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Path Measure !!. get Segment ( 0 f , Ġdistance 2 , Ġdst 2 , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬äºĮ æĿ¡ æĽ² çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åĪĽå»º çº¿ æĢ§ é¢ľèī² æ¸ Ĳ åıĺ åĻ¨ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") Ġval Ġgraph Gradient : ĠShader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Second Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Second Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Second Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Second Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Center Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 0 f , Ġ 0 . 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Paint . shader Ġ= Ġgraph Gradient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( dst 2 , Ġm Second Spline Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ æĽ² çº¿ åĮºåŁŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( last Second Point . x . toFloat (), Ġm X Axis Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( first Second Point . x . toFloat (), Ġm X Axis Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( first Second Point . x . toFloat (), Ġfirst Second Point . y . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åĪĽå»º çº¿ æĢ§ é¢ľèī² æ¸ Ĳ åıĺ åĻ¨ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") Ġval Ġlinear Gradient : ĠShader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( first Second Point . x Ġ+ Ġlast Second Point . x ) Ġ* Ġ 3 Ġshr Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X Axis Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Second Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Second Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( m Second Area Spline Start Color , Ġm Second Area Spline End Color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 0 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Area Spline Paint . shader Ġ= Ġlinear Gradient ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( m Area Spline Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Paint ( m Second Area Spline Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ» æľĢåĲİ ä¸Ģä¸ª çĤ¹ çļĦ Y è½´ çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĊĠĠĠĠ Ġ* Ġ@ param Ġy Item Height ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Last Point Y Axis Line ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġy Item Height : ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlast Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Point List [ m First Spline Point List . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġm Xy Axis Line Paint . color Ġ= Ġm Last Point Y Axis Line Color ĊĠĠĠĠĠĠĠ Ġcanvas . draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm X Axis Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ-( height Ġ- Ġy Item Height Ġ- Ġm Y Axis Margin Top ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis Line Paint ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ ç¬¬ä¸Ģ æĿ¡ æĽ² çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw First Spline ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m First Spline Point List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Point Ġ= Ġm First Spline Point List [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Point List [ m First Spline Point List . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeasure Path ( m First Spline Point List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= ĠPath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdst . r Line To ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġm Path Measure !!. length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Path Measure !!. get Segment ( 0 f , Ġdistance , Ġdst , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ ç¬¬ä¸Ģ æĿ¡ æĽ² çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsave Ġ= Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åĪĽå»º çº¿ æĢ§ é¢ľèī² æ¸ Ĳ åıĺ åĻ¨ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") Ġval Ġfirst Spline Shader : ĠShader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Center Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 0 f , Ġ 0 . 5 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Paint . shader Ġ= Ġfirst Spline Shader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Path ( dst , Ġm First Spline Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( save ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç»ĺ åĪ¶ æĽ² çº¿ åĮºåŁŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( last Point . x . toFloat (), Ġm X Axis Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( first Point . x . toFloat (), Ġm X Axis Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . lineTo ( first Point . x . toFloat (), Ġfirst Point . y . toFloat ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åĪĽå»º çº¿ æĢ§ é¢ľèī² æ¸ Ĳ åıĺ åĻ¨ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Draw Allocation ") Ġval Ġfirst Spline Area Shader : ĠShader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinear Gradient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( first Point . x Ġ+ Ġlast Point . x ) Ġ* Ġ 3 Ġshr Ġ 2 ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm X Axis Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint ArrayOf ( m First Area Spline Start Color , Ġm First Area Spline End Color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat ArrayOf ( 0 f , Ġ 1 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShader . Tile Mode . CLAMP ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Area Spline Paint . shader Ġ= Ġfirst Spline Area Shader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Ġ= Ġcanvas . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( m Area Spline Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Paint ( m First Area Spline Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . restore To Count ( save ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ ç¬¬ä¸Ģ æĿ¡ æĽ² çº¿ çļĦ ç»Ī çĤ¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw First Spline Destination ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m First Spline Point List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Point List [ m First Spline Point List . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ç¬¬ä¸Ģ æĿ¡ çº¿ çļĦ ç»Ī çĤ¹ ( éĽ · è¾¾ æ¶ Ł æ¼ ª æķĪæŀľ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Paint . color Ġ= Ġm First Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Paint . color Ġ= Ġcompute Gradient Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline End Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Animated Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ç¬¬ä¸Ģ æĿ¡ çº¿ çļĦ æľĢåĲİ ä¸Ģä¸ª åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Temp Ġ= Ġtemp List [ temp List . size Ġ- Ġ 1 ]. temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Temp Text Ġ= Ġ"$ last Temp Â° " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . getText Bounds ( last Temp Text , Ġ 0 , Ġlast Temp Text . length , Ġtext Bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Temp Text Base Line Ġ= Ġmeasure Base Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Temp Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y Ġ- Ġ( text Bounds . height () Ġshr Ġ 1 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . color Ġ= Ġm First Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . text Size Ġ= Ġm Last Point Text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . type face Ġ= ĠResources Compat . getFont ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . font . din next l tp ro _ condensed _ fixed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Temp Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x Ġ+ Ġm Last Point Text Margin Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Temp Text Base Line , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ ç¬¬äºĮ æĿ¡ æĽ² çº¿ çļĦ ç»Ī çĤ¹ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcanvas Ġ çĶ» å¸ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Second Spline Destination ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Second Spline Point List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ç¬¬äºĮ æĿ¡ çº¿ çļĦ ç»Ī çĤ¹ ( éĽ · è¾¾ æ¶ Ł æ¼ ª æķĪæŀľ ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Point List [ m Second Spline Point List . size Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Paint . color Ġ= Ġm Second Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Paint . color Ġ= Ġcompute Gradient Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline End Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Animated Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y . toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Radius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Destination Rad ar R ipple Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ç¬¬äºĮ æĿ¡ çº¿ çļĦ æľĢåĲİ ä¸Ģä¸ª åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Last Temp Ġ= Ġm Second Temp List [ m Second Temp List . size Ġ- Ġ 1 ]. temp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Last Temp Text Ġ= Ġ"$ second Last Temp Â° " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Text Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . getText Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Last Temp Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Last Temp Text . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Text Bounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Last Temp Text Base Line Ġ= Ġmeasure Base Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Last Temp Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . y Ġ- Ġ( second Text Bounds . height () Ġshr Ġ 1 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . color Ġ= Ġm Second Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint . text Size Ġ= Ġm Last Point Text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Last Temp Text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Point . x Ġ+ Ġm Last Point Text Margin Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Last Temp Text Base Line , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Point Text Paint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¡ç®Ĺ è´Ŀ å¡ŀ å°Ķ æĽ² çº¿ çļĦ Path åĴĮ Path Measure ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmeasure Path ( point List : ĠList < Point >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Spline Path . reset () ĊĠĠĠĠĠĠĠ Ġm Area Spline Path . reset () ĊĠĠĠĠĠĠĠ Ġm Ass ist Path . reset () ĊĠĠĠĠĠĠĠ Ġvar Ġpre Previous Point X Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġpre Previous Point Y Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Point X Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġprevious Point Y Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Point X Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Point Y Ġ= ĠFloat . NaN ĊĠĠĠĠĠĠĠ Ġvar Ġnext Point X : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġnext Point Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġline Size Ġ= Ġpoint List . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( value Index Ġin Ġ 0 Ġuntil Ġline Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java . lang . Float . isNaN ( current Point X )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġpoint List [ value Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point X Ġ= Ġpoint . x . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Y Ġ= Ġpoint . y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java . lang . Float . isNaN ( previous Point X )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæĺ¯åĲ¦ æĺ¯ ç¬¬ä¸Ģä¸ª çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Index Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġpoint List [ value Index Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point X Ġ= Ġpoint . x . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point Y Ġ= Ġpoint . y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯ çļĦè¯Ŀ å°± çĶ¨ å½ĵåīį çĤ¹ è¡¨ç¤º ä¸Ĭ ä¸Ģä¸ª çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point X Ġ= Ġcurrent Point X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point Y Ġ= Ġcurrent Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( java . lang . Float . isNaN ( pre Previous Point X )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯åĲ¦ æĺ¯ åīį ä¸¤ä¸ª çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Index Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġpoint List [ value Index Ġ- Ġ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point X Ġ= Ġpoint . x . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point Y Ġ= Ġpoint . y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯ çļĦè¯Ŀ å°± çĶ¨ å½ĵåīį çĤ¹ è¡¨ç¤º ä¸Ĭ ä¸Ĭ ä¸ª çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point X Ġ= Ġprevious Point X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point Y Ġ= Ġprevious Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æĺ¯ ä¸įæĺ¯ æľĢåĲİ ä¸Ģä¸ª çĤ¹ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Index Ġ< Ġline Size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġpoint List [ value Index Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point X Ġ= Ġpoint . x . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Y Ġ= Ġpoint . y . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯ çļĦè¯Ŀ å°± çĶ¨ å½ĵåīį çĤ¹ è¡¨ç¤º ä¸ĭ ä¸Ģä¸ª çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point X Ġ= Ġcurrent Point X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Point Y Ġ= Ġcurrent Point Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ Path ç§»åĬ¨ åĪ° å¼Ģå§ĭ çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Path . moveTo ( current Point X , Ġcurrent Point Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . moveTo ( current Point X , Ġcurrent Point Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ass ist Path . moveTo ( current Point X , Ġcurrent Point Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ ± Ĥ åĩº æİ§åĪ¶ çĤ¹ åĿĲæłĩ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diff X Ġ= Ġcurrent Point X Ġ- Ġpre Previous Point X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Diff Y Ġ= Ġcurrent Point Y Ġ- Ġpre Previous Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Diff X Ġ= Ġnext Point X Ġ- Ġprevious Point X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Diff Y Ġ= Ġnext Point Y Ġ- Ġprevious Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst ControlPoint X Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point X Ġ+ Ġm Bezier Spline Smooth ness Ġ* Ġfirst Diff X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst ControlPoint Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point Y Ġ+ Ġm Bezier Spline Smooth ness Ġ* Ġfirst Diff Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond ControlPoint X Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point X Ġ- Ġm Bezier Spline Smooth ness Ġ* Ġsecond Diff X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond ControlPoint Y Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Y Ġ- Ġm Bezier Spline Smooth ness Ġ* Ġsecond Diff Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åĩº æĽ² çº¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Path . cubic To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst ControlPoint X , Ġfirst ControlPoint Y , Ġsecond ControlPoint X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond ControlPoint Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point X , Ġcurrent Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Area Spline Path . cubic To ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst ControlPoint X , Ġfirst ControlPoint Y , Ġsecond ControlPoint X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond ControlPoint Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point X , Ġcurrent Point Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ æİ§åĪ¶ çĤ¹ ä¿ĿåŃĺ åĪ° è¾ ħ åĬ© è·¯å¾Ħ ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ass ist Path . lineTo ( first ControlPoint X , Ġfirst ControlPoint Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ass ist Path . lineTo ( second ControlPoint X , Ġsecond ControlPoint Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Ass ist Path . lineTo ( current Point X , Ġcurrent Point Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ´æĸ° åĢ¼ , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point X Ġ= Ġprevious Point X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Previous Point Y Ġ= Ġprevious Point Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point X Ġ= Ġcurrent Point X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Point Y Ġ= Ġcurrent Point Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point X Ġ= Ġnext Point X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Point Y Ġ= Ġnext Point Y ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Path Measure Ġ= ĠPath Measure ( m Spline Path , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¡ç®Ĺ æĸĩåŃĹ åŁº çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtext Paint ĊĠĠĠĠ Ġ* Ġ@ param Ġtext ĊĠĠĠĠ Ġ* Ġ@ param Ġtop Y ĠĠĠĠĠ Ġ æĸĩåŃĹ Y è½´ é¡¶ éĥ¨ åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmeasure Base Line ( ĊĠĠĠĠĠĠĠ Ġtext Paint : ĠPaint , ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġtop Y : ĠFloat ĊĠĠĠ Ġ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġtext Paint . getText Bounds ( text , Ġ 0 , Ġtext . length , Ġtext Bounds ) ĊĠĠĠĠĠĠĠ Ġval Ġfont Metrics Int Ġ= Ġtext Paint . font Metrics Int ĊĠĠĠĠĠĠĠ Ġval Ġdy Ġ= Ġ( font Metrics Int . bottom Ġ- Ġfont Metrics Int . top ) Ġ/ Ġ 2 Ġ- Ġfont Metrics Int . bottom ĊĠĠĠĠĠĠĠ Ġreturn Ġtop Y Ġ+ Ġ( text Bounds . height () Ġshr Ġ 1 ) Ġ+ Ġdy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsp 2 px ( sp Value : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ SP , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsp Value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources . display Metrics ĊĠĠĠĠĠĠĠ Ġ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdp 2 px ( dp Value : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġresources . display Metrics . density ĊĠĠĠĠĠĠĠ Ġreturn Ġdp Value Ġ* Ġscale Ġ+ Ġ 0 . 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¡ç®Ĺ æ¸ Ĳ åıĺ åĲİçļĦ é¢ľèī² ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstart Color Ġ å¼Ģå§ĭ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġend Color ĠĠ Ġ ç»ĵæĿŁ é¢ľèī² ĊĠĠĠĠ Ġ* Ġ@ param Ġrate ĠĠĠĠĠĠ Ġæ¸ Ĳ åıĺ çİĩ ï¼Ī 0 , 1 ï¼ī ĊĠĠĠĠ Ġ* Ġ@ return Ġæ¸ Ĳ åıĺ åĲİçļĦ é¢ľèī² ï¼Į å½ĵ rate = 0 æĹ¶ ï¼Į è¿ĶåĽŀ start Color ï¼Į å½ĵ rate = 1 æĹ¶ è¿ĶåĽŀ end Color ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcompute Gradient Color ( start Color : ĠInt , Ġend Color : ĠInt , Ġrate : ĠFloat ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrate Ġ= Ġrate ĊĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrate Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( rate Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrate Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . alpha ( end Color ) Ġ- ĠColor . alpha ( start Color ) ĊĠĠĠĠĠĠĠ Ġval Ġred Ġ= ĠColor . red ( end Color ) Ġ- ĠColor . red ( start Color ) ĊĠĠĠĠĠĠĠ Ġval Ġgreen Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . green ( end Color ) Ġ- ĠColor . green ( start Color ) ĊĠĠĠĠĠĠĠ Ġval Ġblue Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . blue ( end Color ) Ġ- ĠColor . blue ( start Color ) ĊĠĠĠĠĠĠĠ Ġreturn ĠColor . arg b ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Color . alpha ( start Color ) Ġ+ Ġalpha Ġ* Ġrate ). round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Color . red ( start Color ) Ġ+ Ġred Ġ* Ġrate ). round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Color . green ( start Color ) Ġ+ Ġgreen Ġ* Ġrate ). round ToInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Color . blue ( start Color ) Ġ+ Ġblue Ġ* Ġrate ). round ToInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® Y è½´ åĪ» åº¦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġscale Ġ Ġ åįķä½į åĪ» åº¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġstr Arr Ġ åĪ» åº¦ ä¸Ĭ å±ķç¤º çļĦ æĸĩåŃĹ ï¼Į èĭ¥ ä¸į è®¾ç½® åĪĻ å±ķç¤º 0 , 5 0 , 1 0 0 , 1 5 0 , 2 0 0 , 2 5 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Y Axis ( scale : ĠFloat , Ġvar arg Ġstr Arr : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( str Arr . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Scale Interval Ġ= Ġscale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Scale List Ġ= Ġmutable ListOf (* str Arr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Temp List ( temp List : ĠList < Temp Bean > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( temp List Ġ!= Ġnull Ġ&& Ġtemp List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . temp List Ġ= Ġtemp List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Point List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtemp List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= ĠPoint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Point List . add ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Second Temp List ( temp List : ĠList < Temp Bean > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( temp List Ġ!= Ġnull Ġ&& Ġtemp List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Temp List Ġ= Ġtemp List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Point List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġtemp List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= ĠPoint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Point List . add ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attrs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Area Spline Chart View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis TextColor Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ yAxis TextColor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Text Size Ġ= Ġtyped Array . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ yAxis Text Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Axis Text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis LineWidth Ġ= Ġtyped Array . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ xy Axis LineWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis LineWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis Line Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ xy Axis Line Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Xy Axis Line Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Point Margin Left Ġ= Ġtyped Array . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ first Point Margin Left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Point Margin Left ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Start Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ first Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Start Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Center Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ first Spline Center Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline Center Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline End Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ first Spline End Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm First Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Start Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ second Spline Start Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Start Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Center Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ second Spline Center Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline Center Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline End Color Ġ= Ġtyped Array . getColor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ second Spline End Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Second Spline End Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Spline Width Ġ= Ġtyped Array . get Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ spline Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdp 2 px ( m Spline Width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Bezier Spline Smooth ness Ġ= Ġtyped Array . get Float ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Area Spline Chart View _ as cv _ line Smooth ness , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Bezier Spline Smooth ness ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} Ċ }