package Ġcom . chen xy u . banner library . indicator Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . chen xy u . banner library . extend . dp To Px Ċ Ċ /** Ċ Ġ* Ġ@ Author : ĠĠĠĠĠĠĠ ĠChen X ing Yu Ċ Ġ* Ġ@ Create Date : ĠĠĠĠ 2 0 2 1 / 5 / 1 6 Ġ 1 7 : 0 5 Ċ Ġ* Ġ@ Description : ĠĠ Ġ çİ¯ çĬ¶ æĮĩ ç¤º åĻ¨ ï¼Ī å¹³ ç§» ï¼ī Ċ Ġ* Ġ@ Version : ĠĠĠĠĠĠĠ 1 . 0 Ċ Ġ*/ Ċ internal Ġclass ĠCircle View Ġ: ĠView Ġ{ ĊĠĠĠ Ġprivate Ġval Ġm Paint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġprivate Ġvar Ġm Measure Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Measure Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġselected Position : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĸ¹åĲĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġorientation : ĠInt Ġ= ĠRecyclerView . HORIZONTAL ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æķ°éĩı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcircle Count : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢī ä¸Ń é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġselected Color : ĠInt Ġ= ĠColor . WHITE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġé»ĺè®¤ é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġnormal Color : ĠInt Ġ= ĠColor . parse Color ("# 8 8 FFFFFF ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åľĨ éĹ´ éļĶ ï¼Ī DP ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġspacing : ĠInt Ġ= Ġ 4 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åľĨ å®½ ï¼Ī DP ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcircle Width : ĠFloat Ġ= Ġ 7 F ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åľĨ é«ĺ ï¼Ī DP ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġcircle Height : ĠFloat Ġ= Ġ 7 F ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Anti Alias Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint . Style . FILL ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Mode Ġ= ĠMeasure Spec . get Mode ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Size Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Mode Ġ= ĠMeasure Spec . get Mode ( height Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġheight Size Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġm Measure Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Measure Height Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( width Mode Ġ== ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Measure Width Ġ= Ġwidth Size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( width Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Measure Width Ġ= Ġwidth Size . coerce At Most ( width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( height Mode Ġ== ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Measure Height Ġ= Ġheight Size ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( height Mode Ġ== ĠMeasure Spec . AT _ MO ST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Measure Height Ġ= Ġheight Size . coerce At Most ( height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( m Measure Width , Ġm Measure Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . HORIZONTAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ åľĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġnormal Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( circle Count ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . times ( i ). plus ( spacing . times ( i )). plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . div ( 2 )). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 ). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . div ( 2 ). dp To Px ( context ), Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢī ä¸Ń åľĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġselected Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . times ( selected Position ). plus ( spacing . times ( selected Position )). plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . div ( 2 )). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 ). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Width . div ( 2 ). dp To Px ( context ), Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . VERTICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ åľĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġnormal Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( circle Count ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( circle Width . div ( 2 ). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . times ( i ). plus ( spacing . times ( i )). plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 )). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 ). dp To Px ( context ), Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĢī ä¸Ń åľĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Paint . color Ġ= Ġselected Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Circle ( circle Width . div ( 2 ). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . times ( selected Position ). plus ( spacing . times ( selected Position )). plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 )). dp To Px ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Height . div ( 2 ). dp To Px ( context ), Ġm Paint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġscroll To ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( circle Count Ġ> Ġ 0 Ġ&& Ġposition Ġ>= Ġ 0 Ġ&& Ġposition Ġ< Ġcircle Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Position Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }