package Ġcom . a qr le i . banner view . widget . banner 2 Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . constraint layout . widget . Constraint Set Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . a qr le i . banner view . widget . Build Config . logger Ċ import Ġcom . a qr le i . banner view . widget . R Ċ import Ġcom . a qr le i . banner view . widget . enums . Indicator Gravity Ċ import Ġcom . a qr le i . banner view . widget . enums . Indicator Position Ċ import Ġcom . a qr le i . banner view . widget . enums . Transformer Style Ċ import Ġcom . a qr le i . banner view . widget . indicator . I Indicator Ċ import Ġcom . a qr le i . banner view . widget . indicator . Indicator View Ċ import Ġcom . a qr le i . banner view . widget . utils . Banner Utils Ċ import Ġcom . a qr le i . banner view . widget . banner 2 . manager . Banner Manager Ċ import Ġcom . a qr le i . banner view . widget . banner 2 . transform . factory . Banner Page Transformer Factory Ċ Ċ /** Ċ Ġ* Ġcreated Ġby ĠA qr Le i Ġon Ġ 2 0 2 0 / 4 / 2 3 Ċ Ġ*/ Ċ class ĠBanner View 2 Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 ) ĊĠĠĠ Ġ: ĠConstraint Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Banner View 2 " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġlog Enable : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfun Ġlog Enable ( enable : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Enable Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbanner Manager : ĠBanner Manager Ġ= ĠBanner Manager () ĊĊĠĠĠ Ġvar Ġindicator View : ĠI Indicator ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġindicator Layout : ĠConstraint Layout Ġ= ĠConstraint Layout ( context ) ĊĠĠĠ Ġprivate Ġval Ġview Pager 2 : ĠView Pager 2 Ġ= ĠView Pager 2 ( context ) ĊĊĠĠĠ Ġvar Ġadapter : ĠAdapter < *> ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. banner View 2 Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Banner () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrunnable Ġ= ĠRunnable Ġ{ Ġhandle Position () Ġ} ĊĊĠĠĠ Ġvar Ġis Can Loop : ĠBoolean Ġ= Ġbanner Manager . banner Options . is Can Loop ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbanner Manager . banner Options . is Can Loop ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . is Can Loop Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! field ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . is Auto Play Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġis Loop ing ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbanner Manager . banner Options . is Loop ing ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . is Loop ing Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġis Auto Play ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbanner Manager . banner Options . is Auto Play ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . is Auto Play Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . is Can Loop Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġinterval ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġbanner Manager . banner Options . interval ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . interval Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġbanner Manager . init Attrs ( context , Ġattrs ) ĊĠĠĠĠĠĠĠ Ġview Pager 2 . id Ġ= ĠR . id . bv Banner ĊĠĠĠĠĠĠĠ Ġindicator Layout . id Ġ= ĠR . id . bv Indicator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attached To Window () ĊĠĠĠĠĠĠĠ Ġstart Loop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġstop Loop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» æİ§ä»¶ çļĦæĹ¶åĢĻ ï¼Į è½® æĴŃ åģľæŃ¢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( ev ?. action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE , ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loop ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Loop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ CANCEL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ OUT SIDE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loop ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Loop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Loop () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Loop ing Ġ&& Ġis Auto Play Ġ&& Ġit . get Real ItemCount () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( run nable , Ġinterval . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loop ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Loop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Loop ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Callbacks ( run nable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Loop ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Item ( item : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġif Ġ( is Can Loop Ġ&& Ġit . get Real ItemCount () Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Loop Item Index ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager 2 . currentItem Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Item ( item : ĠInt , Ġsmooth Scroll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġif Ġ( is Can Loop Ġ&& Ġit . get Real ItemCount () Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Loop Item Index ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġitem ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager 2 . setCurrent Item ( index , Ġsmooth Scroll ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Banner () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove All Views () ĊĠĠĠĠĠĠĠ Ġset Indicator Values () ĊĠĠĠĠĠĠĠ Ġsetup ViewPager 2 () ĊĠĠĠĠĠĠĠ Ġadd Banner Child View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Banner Child View () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł banner å®¹åĻ¨ ViewPager ĊĠĠĠĠĠĠĠ Ġadd View ( view Pager 2 , ĠLayout Params ( 0 , Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart To Start Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop To Top Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend ToEnd Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( banner Manager . banner Options . indicator Position Ġ== ĠIndicator Position . BE LOW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom To Top Ġ= Ġindicator Layout . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Chain Style Ġ= ĠLayout Params . CHAIN _ PACK ED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom To Bottom Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ·»åĬł æĮĩ ç¤º åĻ¨ å®¹åĻ¨ å¸ĥå±Ģ ĊĠĠĠĠĠĠĠ Ġadd View ( indicator Layout . also Ġ{ Ġit . background Ġ= ĠColor Drawable ( Color . TRANSP ARENT ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( 0 , ĠLayout Params . WRAP _ CONTENT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart To Start Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend ToEnd Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( banner Manager . banner Options . indicator Position Ġ== ĠIndicator Position . BE LOW ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop To Bottom Ġ= Ġview Pager 2 . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop To Top Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Bias Ġ= Ġbanner Manager . banner Options . indicator Vertical Bias ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom To Bottom Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġéħįç½® äºĨ ä½¿çĶ¨ å®½ é«ĺ æ¯Ķ ĊĠĠĠĠĠĠĠ Ġval Ġbanner Ratio Ġ= Ġbanner Manager . banner Options . width Height Ratio ĊĠĠĠĠĠĠĠ Ġbanner Ratio . take If Ġ{ Ġit . isNotBlank () Ġ&& Ġbanner Manager . banner Options . banner Use Ratio Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Set Ġ= ĠConstraint Set () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . clone ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . set Dimension Ratio ( view Pager 2 . id , Ġbanner Ratio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraint Set . apply To ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . get Real ItemCount () Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Index Ġ= Ġview Pager 2 . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager 2 . currentItem Ġ= Ġit . get Auto Next Position ( cur Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Delayed ( run nable , Ġinterval . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh Banner () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop Loop () ĊĠĠĠĠĠĠĠ Ġset Indicator Values () ĊĠĠĠĠĠĠĠ Ġsetup ViewPager 2 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Indicator Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġindicator View ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator View Ġ= ĠIndicator View ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . indicator Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Indicator Ġ= Ġindicator View Ġ! is ĠIndicator View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator View ?. indicator Options Ġ= Ġbanner Manager . banner Options . indicator Options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindicator View ?. set PageSize ( it . get Real ItemCount ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Indicator () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Indicator () Ġ{ ĊĠĠĠĠĠĠĠ Ġindicator Layout . visibility Ġ= Ġbanner Manager . banner Options . indicator Visibility ĊĠĠĠĠĠĠĠ Ġ( indicator View Ġas ? ĠView )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġit . parent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Layout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindicator Layout . addView ( it , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ). also Ġ{ Ġlp Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . start To Start Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top To Top Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . end ToEnd Ġ= ĠLayout Params . PARENT _ ID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . bottom To Bottom Ġ= ĠLayout Params . PARENT _ ID ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindicator Margin Ġ= Ġbanner Manager . banner Options . indicator Margin ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . margin Start Ġ= Ġindicator Margin . start ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . top Margin Ġ= Ġindicator Margin . top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . margin End Ġ= Ġindicator Margin . end ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . bottom Margin Ġ= Ġindicator Margin . bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlp . horizontal Bias Ġ= Ġwhen Ġ( banner Manager . banner Options . indicator Gravity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndicator Gravity . START Ġ-> Ġ 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndicator Gravity . CENTER Ġ-> Ġ 0 . 5 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndicator Gravity . END Ġ-> Ġ 1 . 0 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndicator Gravity . BI AS Ġ-> Ġbanner Manager . banner Options . indicator Gravity Bias ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewPager 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view Pager 2 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// MULTI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( banner Manager . banner Options . transformer Style Ġin ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransformer Style . MULTI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransformer Style . MULTI _ OVER LAP )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Page Limit Ġ= Ġbanner Manager . banner Options . offset Page Limit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( getChild At ( 0 ) Ġas ? ĠRecyclerView )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpadding Ġ= Ġbanner Manager . banner Options . reveal Width . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Padding ( padding , Ġ 0 , Ġpadding , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip To Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Page Transformer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Page Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner Page Transformer Factory . create Page Transformer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . transformer Style , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner Manager . banner Options . transformer Scale )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġit . banner Pager Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Item ( it . get Origin Begin Index (), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Loop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Loop Item Index ( offset : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġadapter ?. get Loop Item Index By Offset ( offset ) Ġ?: ĠAdapter . LOOP _ ORIGIN _ INDEX ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlog Debug ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( log Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . d ( TAG , Ġmessage ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAdapter < VH Ġ: ĠViewHolder >( val ĠviewHolder : ĠV H ) Ġ: ĠView Pager 2 . On Page Change Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠLOOP _ ORIGIN _ INDEX Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġpage Change Callback : ĠView Pager 2 . On Page Change Callback ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġpage Click Callback : ĠOn Page Click Callback ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Position : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Loop Position : ĠInt Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġbanner View 2 : ĠBanner View 2 ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġset ĊĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġbanner Pager Adapter : ĠBanner Pager Adapter Ġby Ġlazy Ġ{ ĠBanner Pager Adapter () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġnotify Data Change () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ·æĸ° çļĦæĹ¶åĢĻ Ġ åĽŀ åĪ° ç¬¬ä¸Ģä¸ª ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Position Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æĺ¯ åı¯ å¾ªçİ¯ çļĦ ï¼Į æĶ¹åıĺ current Loop Position çļĦåĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset To Loop Origin Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. banner Manager ?. banner Options ?. indicator Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Position Ġ= Ġthis @ Adapter . current Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. refresh Banner () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Real ItemCount (): ĠInt Ġ= ĠviewHolder . getItem Count () ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Auto Next Position ( cur Index : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcur Index Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset To Loop Origin Index () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Real ItemCount () Ġ> Ġ 0 Ġ&& Ġbanner View 2 !!. is Can Loop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Loop Position Ġ= Ġloop Origin Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Loop Item Index By Offset ( offset : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBanner Utils . get Loop Index (( loop Origin Index () Ġ+ Ġoffset ), Ġget Real ItemCount ()) ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġget Origin Begin Index (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset To Loop Origin Index () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( get Real ItemCount () Ġ> Ġ 1 Ġ&& Ġbanner View 2 !!. is Can Loop ) Ġcurrent Loop Position Ġelse Ġcurrent Position ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. log Debug (" on Page Selected : Ġposition Ġ- Ġ$ position ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġget Real ItemCount () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Position Ġ= ĠBanner Utils . get Real Position 2 ( banner View 2 !!. is Can Loop , Ġposition , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Loop Position Ġ= Ġposition ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. log Debug (" on Page Selected : Ġcurrent Position -$ current Position Ġ, Ġcur Loop Position Ġ: Ġ$ current Loop Position ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. indicator View ?. on Page Selected ( current Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Change Callback ?. on Page Selected ( current Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Pager 2 . SCROLL _ STATE _ SET TL ING , ĠView Pager 2 . SCROLL _ STATE _ DR AG GING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Pager 2 . SCROLL _ STATE _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get Real ItemCount () Ġ> Ġ 1 Ġ&& Ġbanner View 2 !!. is Can Loop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Index Ġ= Ġbanner View 2 !!. view Pager 2 . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. setCurrent Item ( get Real ItemCount () Ġ- Ġ 1 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( cur Index Ġ== ĠgetItem Count () Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. setCurrent Item ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. indicator View ?. on Page Scroll StateChanged ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Change Callback ?. on Page Scroll StateChanged ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset Pixels : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal ItemCount Ġ= Ġget Real ItemCount () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( real ItemCount Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner Utils . get Real Position 2 ( banner View 2 !!. is Can Loop , Ġposition , Ġreal ItemCount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. indicator View ?. on Page Sc rolled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. log Debug (" on Page Sc rolled : Ġreal Position -$ real Position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Change Callback ?. on Page Sc rolled ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreal Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Offset Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġåı¯ å¾ªçİ¯ æĹ¶çļĦ åĪĿå§ĭ ä½įç½® ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġloop Origin Index () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOOP _ ORIGIN _ INDEX ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠgetItem Count () Ġ= Ġbanner Pager Adapter . item Count ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠBanner Pager Adapter Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBanner ViewHolder ( view Holder . create Banner View ( parent , view Type )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Position Ġ= ĠBanner Utils . get Real Position 2 ( banner View 2 !!. is Can Loop , position , get Real ItemCount ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewHolder . getItem ViewType ( real Position ) Ġ?: Ġsuper . getItem ViewType ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( banner View 2 !!. is Can Loop Ġ&& ĠviewHolder . getItem Count () Ġ> Ġ 1 ) ĠviewHolder . getItem Count () Ġ+ Ġ 2 Ġelse ĠviewHolder . getItem Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBanner Utils . get Real Position 2 ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. is Can Loop , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Adapter . get Real ItemCount ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġholder . item View . also Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Click Callback ?. onClick ( v , Ġreal Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. log Debug (" on Bind ViewHolder Ġ- Ġposition Ġ: Ġ$ position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. log Debug (" on Bind ViewHolder Ġ- Ġreal Position Ġ: Ġ$ real Position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 !!. log Debug (" on Bind ViewHolder Ġ- Ġitem Count Ġ: Ġ$ item Count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . bind View ( real Position , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Attached To RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Attached To RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. view Pager 2 ?. register On Page Change Callback ( this @ Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Detached From RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbanner View 2 ?. view Pager 2 ?. unregister On Page Change Callback ( this @ Adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Detached From RecyclerView ( re cyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġopen Ġclass ĠOn Page Click Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġfun ĠonClick ( view : ĠView , Ġposition : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠBanner ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Layout Res ĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġget Layout Id ( view Type : ĠInt ): ĠInt ĊĠĠĠĠĠĠĠ Ġabstract Ġfun ĠgetItem Count (): ĠInt ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Banner View ( parent : ĠViewGroup , view Type : ĠInt ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( get Layout Id ( view Type ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġon View Create ( view , Ġparent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġopen Ġfun Ġon View Create ( view : ĠView , Ġparent : ĠViewGroup ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġopen Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġabstract Ġfun Ġbind View ( position : ĠInt , Ġview : ĠView ) ĊĠĠĠ Ġ} Ċ }