package Ġee . tal tech . k il pk on n . sport s app . component . view Ċ Ċ import Ġandroid . animation . Argb Evaluator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroidx . appcompat . widget . AppCompat ImageView Ċ import Ġee . tal tech . k il pk on n . sport s app . component . spinner . Replay Spinner Items Ċ import Ġee . tal tech . k il pk on n . sport s app . track . pr ac el able . lo action . Track Location Ċ import Ġkotlin . math .* Ċ Ċ class ĠTrack Icon ImageView ( context : ĠContext , attrs : ĠAttributeSet ) Ġ: ĠAppCompat ImageView ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP ADDING Ġ= Ġ 0 . 0 5 f ĊĊĠĠĠĠĠĠĠ Ġval Ġarg b Evaluator Ġ= ĠArg b Evaluator () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcolor : ĠInt Ġ= ĠRe play Spinner Items . COLORS _ MIN _ SPEED [ Replay Spinner Items . NONE ] !! ĊĠĠĠ Ġvar Ġcolor Max : ĠInt Ġ= ĠRe play Spinner Items . COLORS _ MAX _ SPEED [ Replay Spinner Items . NONE ] !! ĊĠĠĠ Ġvar Ġtrack : ĠList < Track Location >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmax Speed Ġ= Ġ 9 9 . 9 9 ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Foreground ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Foreground ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( track Ġ== Ġnull Ġ|| Ġtrack ?. size Ġ== Ġ 0 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġmin Lat Ġ= Ġtrack ?. min By Ġ{ Ġlocation Ġ-> Ġlocation . latitude Ġ} ?. latitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġmax Lat Ġ= Ġtrack ?. max By Ġ{ Ġlocation Ġ-> Ġlocation . latitude Ġ} ?. latitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġmin Lng Ġ= Ġtrack ?. min By Ġ{ Ġlocation Ġ-> Ġlocation . longitude Ġ} ?. longitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġmax Lng Ġ= Ġtrack ?. max By Ġ{ Ġlocation Ġ-> Ġlocation . longitude Ġ} ?. longitude Ġ?: Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġlat Delta Ġ= Ġmax Lat Ġ- Ġmin Lat ĊĠĠĠĠĠĠĠ Ġval Ġlng Multiplier Ġ= Ġcos (( min Lat Ġ+ Ġlat Delta Ġ/ Ġ 2 ) Ġ/ Ġ 1 8 0 f Ġ* ĠPI ) ĊĠĠĠĠĠĠĠ Ġval Ġlng Delta Ġ= Ġ( max Lng Ġ- Ġmin Lng ) Ġ* Ġlng Multiplier ĊĊĠĠĠĠĠĠĠ Ġval Ġmax Delta Ġ= Ġmax ( lat Delta , Ġlng Delta ) ĊĠĠĠĠĠĠĠ Ġval Ġlat Offset Ġ= Ġ( max Delta Ġ- Ġlat Delta ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġlng Offset Ġ= Ġ( max Delta Ġ- Ġlng Delta ) Ġ* Ġlng Multiplier Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 3 f ĊĊĠĠĠĠĠĠĠ Ġval Ġpadded Width Ġ= Ġwidth Ġ* Ġ( 1 Ġ- ĠP ADDING Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġlast Ġ= Ġtrack ?. first () ĊĠĠĠĠĠĠĠ Ġfor Ġ( location Ġin Ġtrack !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrel Speed Ġ= Ġmax ( 0 . 0 , Ġmin ( 1 . 0 , ĠTrack Location . calc Distance Between ( location , Ġlast !! ) Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( location . elapsed Timestamp Ġ- Ġ( last . elapsed Timestamp ) Ġ Ġ+ Ġ 1 ) Ġ/ Ġ 1 _ 0 0 0 _ 0 0 0 _ 0 0 0 Ġ/ Ġ 3 . 6 ) Ġ/ Ġmax Speed )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġarg b Evaluator . evaluate ( rel Speed . pow ( 1 ). toFloat (), Ġcolor , Ġcolor Max ) Ġas ĠInt ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ* ĠP ADDING Ġ+ Ġ(( lng Offset Ġ+ Ġlocation . longitude Ġ- Ġmin Lng ) Ġ* Ġlng Multiplier Ġ/ Ġmax Delta Ġ* Ġpadded Width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ* Ġ( 1 Ġ- ĠP ADDING ) Ġ- Ġ(( lat Offset Ġ+ Ġlocation . latitude Ġ- Ġmin Lat ) Ġ/ Ġmax Delta Ġ* Ġpadded Width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ* ĠP ADDING Ġ+ Ġ(( lng Offset Ġ+ Ġlast . longitude Ġ- Ġmin Lng ) Ġ* Ġlng Multiplier / Ġmax Delta Ġ* Ġpadded Width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ* Ġ( 1 Ġ- ĠP ADDING ) Ġ- Ġ(( lat Offset Ġ+ Ġlast . latitude Ġ- Ġmin Lat ) Ġ/ Ġmax Delta Ġ* Ġpadded Width ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Ġ= Ġlocation ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }