package Ġcom . ang cy o . widget . pager Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġcom . ang cy o . library . ex . dpi Ċ import Ġcom . ang cy o . widget . R Ċ import Ġcom . ang cy o . widget . base .* Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* Ġ 2 ç§į Drawable åĪĩæį¢ çļĦ æĮĩ ç¤º åĻ¨ Ċ Ġ* ĠEmail : ang cy o @ 1 2 6 . com Ċ Ġ* Ġ@ author Ġang cy o Ċ Ġ* Ġ@ date Ġ 2 0 2 0 / 0 3 / 1 8 Ċ Ġ*/ Ċ class ĠDrawable Indicator ( context : ĠContext , Ġattribute Set : ĠAttributeSet ? Ġ= Ġnull ) Ġ: ĊĠĠĠ ĠView ( context , Ġattribute Set ) Ġ{ ĊĊĠĠĠ Ġ/** å½±åĵį å®½ é«ĺ */ ĊĠĠĠ Ġvar Ġdrawable Size : ĠInt Ġby ĠRequest Layout Property ( 6 Ġ* Ġdpi ) ĊĊĠĠĠ Ġ/** å½±åĵį å®½åº¦ */ ĊĠĠĠ Ġvar Ġdrawable Size Focus : ĠInt Ġby ĠRequest Layout Property ( 1 2 Ġ* Ġdpi ) ĊĊĠĠĠ Ġvar Ġindicator Drawable : ĠDrawable ? Ġ= Ġload Drawable ( R . drawable . lib _ indicator _ normal ) ĊĠĠĠ Ġvar Ġindicator Drawable Focus : ĠDrawable ? Ġ= Ġload Drawable ( R . drawable . lib _ indicator _ focus ) ĊĊĠĠĠ Ġ/** æĮĩ ç¤º åĻ¨ æķ°éĩı */ ĊĠĠĠ Ġvar Ġindicator Count : ĠInt Ġby ĠRequest Layout Property ( 0 ) ĊĊĠĠĠ Ġ/** å½ĵåīį æĺ¾ç¤º */ ĊĠĠĠ Ġvar Ġindicator Index : ĠInt Ġby ĠIn validate Property ( 0 ) ĊĊĠĠĠ Ġ/** éĹ´ éļ Ļ */ ĊĠĠĠ Ġvar Ġindicator Space : ĠInt Ġby ĠRequest Layout Property ( 4 Ġ* Ġdpi ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtyped Array Ġ= Ġcontext . obtain Styled Attributes ( attribute Set , ĠR . style able . Drawable Indicator ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Drawable Indicator _ r _ indicator _ drawable )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Drawable Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Drawable ( R . style able . Drawable Indicator _ r _ indicator _ drawable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( typed Array . hasValue ( R . style able . Drawable Indicator _ r _ indicator _ drawable _ focus )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Drawable Focus Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtyped Array . get Drawable ( R . style able . Drawable Indicator _ r _ indicator _ drawable _ focus ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawable Size Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Drawable Indicator _ r _ indicator _ size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Size ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdrawable Size Focus Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Drawable Indicator _ r _ indicator _ size _ focus , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Size Focus ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġindicator Space Ġ= Ġtyped Array . get Dimension Pixel Offset ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . style able . Drawable Indicator _ r _ indicator _ space , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Space ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtyped Array . recycle () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Count Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Index Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġwidth Size Ġ= Ġwidth Measure Spec . getSize () ĊĠĠĠĠĠĠĠ Ġvar Ġheight Size Ġ= Ġheight Measure Spec . getSize () ĊĠĠĠĠĠĠĠ Ġif Ġ( width Measure Spec . get Mode () Ġ!= ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Size Ġ= Ġpadding Left Ġ+ Ġpadding Right Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable Size Ġ* Ġ( indicator Count Ġ- Ġ 1 ) Ġ+ Ġdrawable Size Focus Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Space Ġ* Ġ( indicator Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( height Measure Spec . get Mode () Ġ!= ĠMeasure Spec . EX ACT LY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheight Size Ġ= Ġpadding Top Ġ+ Ġpadding Bottom Ġ+ Ġmax ( drawable Size , Ġdrawable Size Focus ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// super . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( width Size , Ġsuggested Minimum Width ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax ( height Size , Ġsuggested Minimum Height ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= Ġpadding Left ĊĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġpadding Top ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġindicator Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ anim ator ?. is Started Ġ== Ġtrue Ġ&& Ġi Ġ== Ġindicator Index Ġ-> Ġ( drawable Size Ġ- Ġ( drawable Size Ġ- Ġdrawable Size Focus ) Ġ* Ġ_ anim ator Fraction ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ anim ator ?. is Started Ġ== Ġtrue Ġ&& Ġi Ġ== Ġ_ anim ator From Index Ġ-> Ġ( drawable Size Focus Ġ- Ġ( drawable Size Focus Ġ- Ġdrawable Size ) Ġ* Ġ_ anim ator Fraction ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ== Ġindicator Index Ġ-> Ġdrawable Size Focus ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdrawable Size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġdrawable Size ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġpadding Top Ġ+ Ġ( draw Height Ġ- Ġheight ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġif Ġ( i Ġ== Ġindicator Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Drawable Focus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġleft Ġ+ Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( left , Ġtop , Ġright , Ġtop Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġright Ġ+ Ġindicator Space ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġ_ anim ator : ĠValue Animator ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġ_ anim ator From Index : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġvar Ġ_ anim ator Fraction : ĠFloat Ġ= Ġ 1 f ĊĊĠĠĠ Ġ/** ä½¿çĶ¨ åĬ¨çĶ» çļĦæĸ¹å¼ı åĪĩæį¢ */ ĊĠĠĠ Ġfun Ġanim ator To Index ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ anim ator ?. cancel () ĊĠĠĠĠĠĠĠ Ġ_ anim ator Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ_ anim ator From Index Ġ= Ġindicator Index ĊĠĠĠĠĠĠĠ Ġindicator Index Ġ= Ġindex ĊĊĠĠĠĠĠĠĠ Ġif Ġ(_ anim ator From Index Ġ== Ġindicator Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ anim ator Ġ= Ġanim ( 0 f , Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Animator Update Value Ġ= Ġ{ Ġvalue , Ġfraction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ anim ator Fraction Ġ= Ġfraction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Invalidate On Animation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }