package Ġcom . y uch en fw . signal view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ Ċ /** Ċ Ġ* Ġ åĬ¨æĢģ æĹ ĭ è½¬ åĪ° æĮĩå®ļ è§Ĵ åº¦ ï¼Į ä» ¿ ä¸ĩ èĥ½ éĴ¥ åĮ Ļ çļĦ ä¿¡åı· æ£Ģæµĭ View ï¼Į Ċ Ġ* Ġ åĪĿ æ¬¡ ä¼ļ è½¬ åĬ¨ åĪ° æľĢå¤§ è§Ĵ åº¦ ï¼Į çĦ¶åĲİ è½¬ åĬ¨ åĪ° æĮĩå®ļ è§Ĵ åº¦ Ċ Ġ* ĠCreated Ġby Ġy uch en fw Ġon Ġ 2 0 1 8 / 3 / 1 9 . Ċ Ġ* Ġ@ author Ġy uch en fw Ċ Ġ*/ Ċ class ĠSignal View ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: ĠView ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĠĠĠ Ġconstructor ( context : ĠContext ?, Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext ?) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭ æľĢå¤§ è§Ĵ åº¦ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ ANGLE _ DEFAULT Ġ= Ġ 2 7 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Paint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġ// æľĢå¤§ è§Ĵ åº¦ ĊĠĠĠ Ġprivate Ġvar Ġm Max Angle Ġ= Ġ 2 7 0 ĊĠĠĠ Ġ// è½¬ éĢŁ ĊĠĠĠ Ġprivate Ġvar Ġm Angle Speed Ġ= Ġ 5 ĊĠĠĠ Ġ// å½ĵåīį è§Ĵ åº¦ ĊĠĠĠ Ġprivate Ġvar ĠmCurrent Angle Ġ= Ġ 0 ĊĠĠĠ Ġ// æĮĩéĴĪ åĽ¾çīĩ ĊĠĠĠ Ġprivate Ġvar Ġm Speed Pointer Bitmap Source : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġ// è¿Ľ åº¦ åĽ¾çīĩ æºĲ æĸĩä»¶ ĊĠĠĠ Ġprivate Ġvar Ġm Speed Process Bitmap Source : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġ// è¿Ľ åº¦ åĽ¾çīĩ å¤ĦçĲĨ åĲİ åĽ¾çīĩ ĊĠĠĠ Ġprivate Ġvar Ġm Speed Process Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġ// åĪ» åº¦ çĽĺ åĽ¾çīĩ ĊĠĠĠ Ġprivate Ġvar Ġm Speed Dial Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġ// æľĢç»Ī ç»ĺ åĪ¶ åĽ¾çīĩ çļĦ matrix ĊĠĠĠ Ġprivate Ġvar Ġm Speed Bitmap Matrix : ĠMatrix ? Ġ= Ġnull ĊĠĠĠ Ġ// åĽ¾çīĩ å®½åº¦ ĊĠĠĠ Ġprivate Ġvar Ġm View Width Ġ= Ġ 0 ĊĠĠĠ Ġ// åĽ¾çīĩ é«ĺåº¦ ĊĠĠĠ Ġprivate Ġvar Ġm View Height Ġ= Ġ 0 ĊĠĠĠ Ġ// warp _ content æĹ¶ æľĢå¤§ å®½åº¦ åıĬ é«ĺåº¦ ĊĠĠĠ Ġprivate Ġval Ġm Max Width Ġ= ĠD ensity Utils . dp 2 px ( context !! , Ġ 3 0 0 f ) ĊĠĠĠ Ġprivate Ġval Ġm Max Height Ġ= ĠD ensity Utils . dp 2 px ( context !! , Ġ 3 0 0 f ) ĊĠĠĠ Ġ// æĺ¯åĲ¦ ç¬¬ ä¸Ģæ¬¡ åĲ¯åĬ¨ ĊĠĠĠ Ġprivate Ġvar Ġfirst Check Ġ= Ġfalse ĊĠĠĠ Ġ// View ä¸Ńå¿ĥ x åĿĲæłĩ ĊĠĠĠ Ġprivate Ġvar Ġm View Center X Ġ= Ġ 0 f ĊĠĠĠ Ġ// View ä¸Ńå¿ĥ y åĿĲæłĩ ĊĠĠĠ Ġprivate Ġvar Ġm View Center Y Ġ= Ġ 0 f ĊĠĠĠ Ġ// View ä¸ĭ éĥ¨ æĺ¾ç¤º åĲįç§° ĊĠĠĠ Ġprivate Ġvar Ġm Target Name Ġ= Ġ"" ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Speed Pointer Bitmap Source Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . signal _ check _ pointer ) ĊĠĠĠĠĠĠĠ Ġm Speed Process Bitmap Source Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . signal _ check _ process ) ĊĠĠĠĠĠĠĠ Ġm Speed Dial Bitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . signal _ check _ dial ) ĊĠĠĠĠĠĠĠ Ġm Speed Bitmap Matrix Ġ= ĠMatrix () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Drawable Matrix () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Speed Bitmap Matrix !!. reset () ĊĠĠĠĠĠĠĠ Ġm View Center X Ġ= Ġm View Width Ġ/ Ġ 2 . toFloat () Ġ+ Ġpadding Left . toFloat () ĊĠĠĠĠĠĠĠ Ġm View Center Y Ġ= Ġm View Height Ġ/ Ġ 2 . toFloat () Ġ+ Ġpadding Top . toFloat () ĊĠĠĠĠĠĠĠ Ġ// ç¼© æĶ¾ åĢ į æķ° ĊĠĠĠĠĠĠĠ Ġval Ġscale X Ġ= Ġm View Width Ġ/ Ġm Speed Pointer Bitmap Source !!. width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġscale Y Ġ= Ġm View Height Ġ/ Ġm Speed Pointer Bitmap Source !!. height . toFloat () ĊĠĠĠĠĠĠĠ Ġ// ç¼© æĶ¾ ĊĠĠĠĠĠĠĠ Ġm Speed Bitmap Matrix !!. post Scale ( scale X , Ġscale Y ) ĊĠĠĠĠĠĠĠ Ġ// å¹³ ç§» ĊĠĠĠĠĠĠĠ Ġm Speed Bitmap Matrix !!. post Translate ( padding Left . toFloat (), Ġpadding Top . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ// ç» ķ ä¸Ńå¿ĥ æĹ ĭ è½¬ ĊĠĠĠĠĠĠĠ Ġm Speed Bitmap Matrix !!. post Rotate ( m Current Angle . toFloat (), Ġm View Center X , Ġm View Center Y ) ĊĊĠĠĠĠĠĠĠ Ġ// å¤ĸ å±Ĥ ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . post Scale ( m View Width . toFloat () Ġ/ Ġm Speed Process Bitmap Source !!. width , Ġm View Height . toFloat () Ġ/ Ġm Speed Process Bitmap Source !!. height . toFloat ()) ĊĠĠĠĠĠĠĠ Ġm Speed Process Bitmap Ġ= ĠBitmap . create Bitmap ( m Speed Process Bitmap Source !! , Ġ 0 , Ġ 0 , Ġm Speed Process Bitmap Source !!. width , Ġm Speed Process Bitmap Source !!. height , Ġmatrix , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ// åĪ» åº¦ çĽĺ ĊĠĠĠĠĠĠĠ Ġm Speed Dial Bitmap Ġ= ĠBitmap . create Scaled Bitmap ( m Speed Dial Bitmap , Ġm View Width , Ġm View Height , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġm View Width Ġ= Ġwidth Ġ- Ġpadding Left Ġ- Ġpadding Right ĊĠĠĠĠĠĠĠ Ġm View Height Ġ= Ġheight Ġ- Ġpadding Top Ġ- Ġpadding Bottom ĊĠĠĠĠĠĠĠ Ġcalculate Drawable Matrix () ĊĠĠĠĠĠĠĠ Ġm Paint . reset () ĊĠĠĠĠĠĠĠ Ġm Paint . is Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= ĠContext Compat . getColor ( context , Ġandroid . R . color . white ) ĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ åĪ» åº¦ çĽĺ ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Bitmap ( m Speed Dial Bitmap , Ġpadding Left . toFloat (), Ġpadding Top . toFloat (), Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ åľĨ çİ¯ ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Bitmap ( m Speed Process Bitmap , Ġpadding Left . toFloat (), Ġpadding Top . toFloat (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ æĮĩéĴĪ ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Bitmap ( m Speed Pointer Bitmap Source , Ġm Speed Bitmap Matrix , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ ä¸ŃéĹ´ æĮĩ ç¤º æķ° åĢ¼ ĊĠĠĠĠĠĠĠ Ġm Paint . text Size Ġ= ĠD ensity Utils . sp 2 px ( context !! , Ġ 2 0 f ). toFloat () ĊĠĠĠĠĠĠĠ Ġm Paint . textAlign Ġ= ĠPaint . Align . CENTER ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ("${ ( m Current Angle Ġ/ ĠMAX _ ANGLE _ DEFAULT . toFloat () Ġ* Ġ 1 0 0 ). toInt ()} %", Ġm View Center X , Ġm View Center Y Ġ+ ĠD ensity Utils . sp 2 px ( context !! , Ġ 6 f ). toFloat (), Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġm Paint . color Ġ= ĠContext Compat . getColor ( context , Ġandroid . R . color . dark er _ gray ) ĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ åºķ éĥ¨ åĲįç§° ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Text ( m Target Name , Ġm View Center X , Ġheight Ġ- Ġpadding Bottom Ġ- ĠD ensity Utils . sp 2 px ( context !! , Ġ 2 0 f ). toFloat (), Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® éģ ® æĮ ¡ åľĨ çİ¯ çļĦåıĤæķ° ĊĠĠĠĠĠĠĠ Ġm Paint . style Ġ= ĠPaint . Style . ST RO KE ĊĠĠĠĠĠĠĠ Ġm Paint . alpha Ġ= Ġ 2 4 0 ĊĠĠĠĠĠĠĠ Ġ// çİ¯ å½¢ çļĦ å®½åº¦ ĊĠĠĠĠĠĠĠ Ġm Paint . stroke Width Ġ= ĠD ensity Utils . dp 2 px ( context , Ġ 1 5 f ). toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġm View Width Ġ/ Ġ 2 f Ġ- ĠD ensity Utils . dp 2 px ( context , Ġ 4 1 . 5 f )// 4 1 . 5 dp æĺ¯ åĽ¾çīĩ è¾¹ ç¼ ĺ è·Ŀç¦» åľĨ çİ¯ å¤Ħ çļĦ è·Ŀç¦» ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġm View Height Ġ/ Ġ 2 f Ġ- ĠD ensity Utils . dp 2 px ( context , Ġ 4 1 . 5 f ) ĊĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ åľĨ çİ¯ éģ ® æĮ ¡ å±Ĥ ĊĠĠĠĠĠĠĠ Ġval Ġrect F Ġ= ĠRect F ( m View Center X Ġ- Ġx , Ġm View Center Y Ġ- Ġy , Ġm View Center Y Ġ+ Ġx , Ġm View Center Y Ġ+ Ġy ) ĊĠĠĠĠĠĠĠ Ġcanvas ?. draw Arc ( rect F , Ġ 1 3 5 f Ġ+ ĠmCurrent Angle , ĠMAX _ ANGLE _ DEFAULT Ġ- ĠmCurrent Angle . toFloat (), Ġfalse , Ġm Paint ) ĊĠĠĠĠĠĠĠ Ġ// åĪĿ æ¬¡ ä¼ļ è½¬ åĬ¨ åĪ° æľĢå¤§ è§Ĵ åº¦ åĲİ ï¼Į è¿ĶåĽŀ åĪ° æĮĩå®ļ è§Ĵ åº¦ ĊĠĠĠĠĠĠĠ Ġif Ġ(! first Check ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Angle Ġ+= Ġm Angle Speed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Angle Ġ>= ĠMAX _ ANGLE _ DEFAULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Current Angle Ġ>= Ġm Max Angle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent Angle Ġ-= Ġm Angle Speed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpost Invalidate Delayed ( 1 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æĶ¯æĮģ wrap _ content ĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Measure Spec Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Measure Spec Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Measure Spec Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Measure Spec Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( width Measure Spec Mode Ġ== ĠMeasure Spec . AT _ MO ST Ġ&& Ġheight Measure Spec Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Max Width , Ġm Max Height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Measure Spec Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Max Width , Ġheight Measure Spec Size ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( height Measure Spec Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Measured Dimension ( width Measure Spec Size , Ġm Max Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// è®¾ç½® æľĢå¤§ è§Ĵ åº¦ ĊĠĠĠ Ġfun Ġset Angle ( angle : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Max Angle Ġ= Ġangle ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// è®¾ç½® View ä¸ĭ åĲįç§° ĊĠĠĠ Ġfun ĠsetName ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Target Name Ġ= Ġname ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// è®¾ç½® è½¬ åĬ¨ éĢŁåº¦ ĊĠĠĠ Ġfun Ġset Angle Speed ( speed : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Angle Speed Ġ= Ġspeed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// è®¾ç½® ï¼Į æľĢå¤§ è§Ĵ åº¦ ï¼Į è½¬ éĢŁ ï¼Į åĲįç§° ĊĠĠĠ Ġfun Ġset Parameters ( max Angle : ĠInt , Ġangle Speed : ĠInt , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Max Angle Ġ= Ġmax Angle ĊĠĠĠĠĠĠĠ Ġm Angle Speed Ġ= Ġangle Speed ĊĠĠĠĠĠĠĠ Ġm Target Name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} Ċ }