package Ġcn . lap lac et ech . k lin el ib . chart Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ Ċ import Ġcom . github . mike phil . chart ing . charts . Combined Chart Ċ import Ġcom . github . mike phil . chart ing . components . IM ark er Ċ import Ġcom . github . mike phil . chart ing . components . Y Axis Ċ import Ġcom . github . mike phil . chart ing . data . Combined Data Ċ import Ġcom . github . mike phil . chart ing . data . DataSet Ċ import Ġcom . github . mike phil . chart ing . data . Entry Ċ import Ġcom . github . mike phil . chart ing . highlight . Highlight Ċ import Ġcom . github . mike phil . chart ing . interfaces . datasets . I DataSet Ċ import Ġcom . github . mike phil . chart ing . utils . MP PointF Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġl il if eng @ lap lac et ech . cn Ġon Ġ 2 0 1 8 / 8 / 6 . Ċ Ġ* Ċ Ġ*/ Ċ Ċ class ĠCustom Combined Chart Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style : ĠInt Ġ= Ġ 0 ) Ġ: ĠCom bined Chart ( context , Ġattrs , Ġdef Style ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm X Marker : ĠI Marker ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Y Marker : ĠI Marker ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Y Center : ĠFloat Ġ= Ġ 0 . toFloat () ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init () ĊĠĠĠĠĠĠĠ Ġm Renderer Ġ= ĠCustom Combined Chart Renderer ( this , Ġm Animator , Ġm View Port Handler ) ĊĠĠĠĠĠĠĠ Ġis Log Enabled Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Y Marker ( marker : ĠI Marker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Y Marker Ġ= Ġmarker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset X Marker ( marker : ĠI Marker ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm X Marker Ġ= Ġmarker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetData ( data : ĠCom bined Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . setData ( data ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġignore ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( m Renderer Ġas ĠCustom Combined Chart Renderer ). create Render ers () ĊĠĠĠĠĠĠĠ Ġm Renderer . init Buffers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Markers ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . draw Markers ( canvas ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m X Marker Ġ== Ġnull Ġ|| Ġ! is Draw Markers Enabled Ġ|| Ġ! values To Highlight ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġm Indices To Highlight . indices ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhighlight Ġ= Ġm Indices To Highlight [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġset Ġ= Ġm Data . getData Set ByIndex ( highlight . data Set Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġm Data . getEntry For Highlight ( m Indices To Highlight [ i ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġæľī çĸĳ éĹ® ï¼Į ä¿®æĶ¹ åīį æĺ¯ ï¼ļ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Index Ġ= Ġset . getEntry Index ( e ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Index Ġ= Ġset . getEntry Index ( e . x , Ġe . y , ĠDataSet . Round ing . CLOSE ST ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure Ġentry Ġnot Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġ== Ġnull Ġ|| Ġset . getEntry Index ( e . x , Ġe . y , ĠDataSet . Round ing . CLOSE ST ) Ġ> Ġset . entry Count Ġ* Ġm Animator . phase X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpos Ġ= Ġget Marker Position ( highlight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcheck Ġbounds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! m View Port Handler . isIn Bounds ( pos [ 0 ], Ġpos [ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcallbacks Ġto Ġupdate Ġthe Ġcontent Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Marker . refresh Content ( e , Ġhighlight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm X Marker ?. refresh Content ( e , Ġhighlight ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Y Marker ?. refresh Content ( e , Ġhighlight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdraw Ġthe Ġmarker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Marker Ġinstanceof ĠLine Chart Y Marker View ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Marker Ġ= Ġm Marker Ġas ĠLine Chart Y Marker View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Marker Ġ= Ġm X Marker Ġas ĠLine Chart X Marker View ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Marker Ġ= Ġm Y Marker Ġas ĠLine Chart Y Marker View ? Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġy Marker . meas ured Width Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġm Marker . draw ( canvas , Ġmeasured Width Ġ- Ġwidth Ġ* Ġ 1 . 0 5 f , Ġpos [ 1 ] Ġ- Ġy Marker . meas ured Height Ġ/ Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm X Marker ?. draw ( canvas , Ġpos [ 0 ] Ġ- Ġx Marker !!. meas ured Width Ġ/ Ġ 2 , Ġmeasured Height . toFloat () Ġ- Ġx Marker . meas ured Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Marker ?. draw ( canvas , Ġ 0 f , Ġpos [ 1 ] Ġ- Ġy Marker . meas ured Height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Marker . draw ( canvas , Ġpos [ 0 ], Ġpos [ 1 ]); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Description ( c : ĠCanvas ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġdescription Ġshould Ġbe Ġdrawn ĊĠĠĠĠĠĠĠ Ġif Ġ( m Description Ġ!= Ġnull Ġ&& Ġm Description . isEnabled ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġm Description . position ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Desc Paint . type face Ġ= Ġm Description . type face ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Desc Paint . text Size Ġ= Ġm Description . text Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Desc Paint . color Ġ= Ġm Description . textColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Desc Paint . textAlign Ġ= Ġm Description . textAlign ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy : ĠFloat ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġno Ġposition Ġspecified , Ġdraw Ġon Ġdefault Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġwidth . toFloat () Ġ- Ġm View Port Handler . offset Right () Ġ- Ġm Description . x Offset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġm Description . text Size Ġ+ Ġm View Port Handler . offset Top () Ġ+ Ġm Description . y Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġposition . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġposition . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Text ( m Description . text , Ġx , Ġy , Ġm Desc Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩį åĨĻ è¿Ļ ä¸¤ä¸ª æĸ¹æ³ķ ï¼Į ä¸ºäºĨ è®© å¼Ģ çĽĺ ä»· åĴĮ æ¶ ¨ è· Į å¹ ħ åī § ä¸Ń æĺ¾ç¤º ĊĠĠĠĠ Ġ* ĠPerforms Ġauto Ġscaling Ġof Ġthe Ġaxis Ġby Ġre calcul ating Ġthe Ġminimum Ġand Ġmaximum Ġy - values Ġbased Ġon Ġthe Ġentries Ġcurrently Ġin Ġview . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġauto Scale () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfrom X Ġ= Ġlowest Visible X ĊĠĠĠĠĠĠĠ Ġval Ġto X Ġ= Ġhighest Visible X ĊĊĠĠĠĠĠĠĠ Ġm Data . calc MinMax Y ( from X , Ġto X ) ĊĊĠĠĠĠĠĠĠ Ġm X Axis . calculate ( m Data . x Min , Ġm Data . x Max ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġaxis Ġrange Ġ( min Ġ/ Ġmax ) Ġaccording Ġto Ġprovided Ġdata ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Axis Left . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Y Center Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Left . calculate ( m Data . getY Min ( Y Axis . Axis Dependency . LEFT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Data . getY Max ( Y Axis . Axis Dependency . LEFT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Min Ġ= Ġm Data . getY Min ( Y Axis . Axis Dependency . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Max Ġ= Ġm Data . getY Max ( Y Axis . Axis Dependency . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠMath . max ( Math . abs ( m Y Center Ġ- Ġy Max ), ĠMath . abs ( m Y Center Ġ- Ġy Min )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Max Ġ= ĠMath . max ( y Max , Ġm Y Center Ġ+ Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Min Ġ= ĠMath . min ( y Min , Ġm Y Center Ġ- Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Left . calculate ( y Min , Ġy Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Axis Right . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Y Center Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Right . calculate ( m Data . getY Min ( Y Axis . Axis Dependency . RIGHT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Data . getY Max ( Y Axis . Axis Dependency . RIGHT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Min Ġ= Ġm Data . getY Min ( Y Axis . Axis Dependency . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Max Ġ= Ġm Data . getY Max ( Y Axis . Axis Dependency . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠMath . max ( Math . abs ( m Y Center Ġ- Ġy Max ), ĠMath . abs ( m Y Center Ġ- Ġy Min )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Max Ġ= ĠMath . max ( y Max , Ġm Y Center Ġ+ Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Min Ġ= ĠMath . min ( y Min , Ġm Y Center Ġ- Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Right . calculate ( y Min , Ġy Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcalculate Offsets () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĩį åĨĻ è¿Ļ ä¸¤ä¸ª æĸ¹æ³ķ ï¼Į ä¸ºäºĨ è®© å¼Ģ çĽĺ ä»· åĴĮ æ¶ ¨ è· Į å¹ ħ åī § ä¸Ń æĺ¾ç¤º ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcalc MinMax () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġm X Axis . calculate ( m Data . x Min , Ġm Data . x Max ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Y Center Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcalculate Ġaxis Ġrange Ġ( min Ġ/ Ġmax ) Ġaccording Ġto Ġprovided Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Left . calculate ( m Data . getY Min ( Y Axis . Axis Dependency . LEFT ), Ġm Data . getY Max ( Y Axis . Axis Dependency . LEFT )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Right . calculate ( m Data . getY Min ( Y Axis . Axis Dependency . RIGHT ), Ġm Data . getY Max ( Y Axis . Axis Dependency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. RIGHT )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy L Min Ġ= Ġm Data . getY Min ( Y Axis . Axis Dependency . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy L Max Ġ= Ġm Data . getY Max ( Y Axis . Axis Dependency . LEFT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= ĠMath . max ( Math . abs ( m Y Center Ġ- Ġy L Max ), ĠMath . abs ( m Y Center Ġ- Ġy L Min )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy L Max Ġ= ĠMath . max ( y L Max , Ġm Y Center Ġ+ Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy L Min Ġ= ĠMath . min ( y L Min , Ġm Y Center Ġ- Ġinterval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Left . calculate ( y L Min , Ġy L Max ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy R Min Ġ= Ġm Data . getY Min ( Y Axis . Axis Dependency . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy R Max Ġ= Ġm Data . getY Max ( Y Axis . Axis Dependency . RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr interval Ġ= ĠMath . max ( Math . abs ( m Y Center Ġ- Ġy R Max ), ĠMath . abs ( m Y Center Ġ- Ġy R Min )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy R Max Ġ= ĠMath . max ( y R Max , Ġm Y Center Ġ+ Ġr interval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy R Min Ġ= ĠMath . min ( y R Min , Ġm Y Center Ġ- Ġr interval ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Axis Right . calculate ( y R Min , Ġy R Max ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĽ¾ è¡¨ ä¸Ń Y å±ħ ä¸ŃçļĦ åĢ¼ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Y Center ( Y Center : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Y Center Ġ= ĠY Center ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Y Mark View (): ĠI Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Y Marker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget X Mark View (): ĠI Marker ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm X Marker ĊĠĠĠ Ġ} Ċ } Ċ