/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠDr ake , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . dr ake . br v Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Color Res Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . St agger ed Grid LayoutManager Ċ import Ġcom . dr ake . br v . Default Decoration . Edge . Companion . compute Edge Ċ import Ġcom . dr ake . br v . annot a ion . Divider Orientation Ċ import Ġcom . dr ake . br v . item . Item Expand Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* Ġ æľĢ å¼º å¤§çļĦ åĪĨ åī² çº¿ å·¥åħ· Ċ Ġ* Ċ Ġ* Ġ 1 . ĠåĪĨ éļĶ åĽ¾çīĩ Ċ Ġ* Ġ 2 . ĠåĪĨ éļĶ é¢ľèī² Ċ Ġ* Ġ 3 . ĠåĪĨ éļĶ éĹ´ è·Ŀ Ċ Ġ* Ġ 4 . Ġ åĽŀè°ĥ åĩ½æķ° åĪ¤æĸŃ éĹ´ éļĶ Ċ Ġ* Ġ 5 . Ġ é¦ĸ å°¾ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ éļĶ çº¿ , Ġåı¯ä»¥ å±ķç¤º è¡¨ æł¼ æķĪæŀľ Ċ Ġ* Ġ 6 . Ġ ç±»åŀĭ æ±ł æĿ¥ æĮĩå®ļ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ Ċ Ġ* Ġ 7 . ĠæĶ¯æĮģ åħ¨éĥ¨ çļĦ LayoutManager , Ġ ç« ĸ åĲĳ / æ¨ ª åĲĳ / ç½ĳ æł¼ åĪĨ åī² çº¿ Ċ Ġ* Ġ 8 . Ġ ä¼ĺ äºİ åħ¶ä»ĸ æ¡Ĩæŀ¶ , Ġ å®Į ç¾İ æĶ¯æĮģ åĿĩ å¸ĥ ç½ĳ æł¼ åĪĨ éļĶ çī© Ċ Ġ* Ġ 9 . ĠæĶ¯æĮģ åĪĨ ç»Ħ æĿ¡ çĽ®çļĦ åĪĨ åī² çº¿ Ċ Ġ* Ċ Ġ* Ġ@ property Ġstart Visible Ġåľ¨ [ Grid LayoutManager ]/ [ St agger ed Grid LayoutManager ] ä¸Ń æİ§åĪ¶ ä¸Ĭä¸ĭ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ , Ġåľ¨ [ Linear LayoutManager ] ä¸Ń æİ§åĪ¶ é¡¶ éĥ¨ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ Ċ Ġ* Ġ@ property Ġend Visible Ġåľ¨ [ Grid LayoutManager ]/ [ St agger ed Grid LayoutManager ] ä¸Ń æİ§åĪ¶ å·¦ åı³ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ , Ġåľ¨ [ Linear LayoutManager ] ä¸Ń æİ§åĪ¶ åºķ éĥ¨ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ Ċ Ġ* Ġ@ property Ġexpand Visible Ġ æİ§åĪ¶ [ Item Expand . item Expand ] ä¸º true çļĦ æĥħåĨµä¸ĭ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ , Ġ ä½Ĩ å½ĵ ä½ł éħįç½® [ on Enabled ] åĲİ åĪĻ æĹł æķĪ , Ġ åĽłä¸º æŃ¤ åŃĹæ®µ ä¸º åħ¶ é»ĺè®¤ å®ŀçİ° æīĢ çĶ¨ Ċ Ġ* Ġ@ property Ġorientation ĠåĪĨ åī² çº¿ çļĦ æĸ¹åĲĳ , Ġ ä»ħ æĶ¯æĮģ [ Grid LayoutManager ], Ġ åħ¶ä»ĸ LayoutManager éĥ½æĺ¯ æł¹æį® åħ¶ æĸ¹åĲĳ èĩªåĬ¨ éĢĤ åºĶ Ċ Ġ* Ġ@ property Ġtype Pool Ġ éĽĨåĲĪ åĨħ åĮħåĲ« çļĦ ç±»åŀĭ æīį æĺ¾ç¤º åĪĨ åī² çº¿ Ċ Ġ*/ Ċ class ĠDefault Decoration Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¬¬ä¸Ģä¸ª æĿ¡ çĽ® ä¹ĭåīį æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ , Ġå½ĵ å¤Ħ äºİ [ Divider Orientation . GRID ] ĠæĹ¶ æ°´ å¹³ æĸ¹åĲĳ é¡¶ ç«¯ åĴĮ æľ« ç«¯ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstart Visible Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æľĢåĲİ ä¸Ģä¸ª æĿ¡ çĽ® æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ , Ġå½ĵ å¤Ħ äºİ [ Divider Orientation . GRID ] ĠæĹ¶ åŀ Ĥ çĽ´ æĸ¹åĲĳ é¡¶ ç«¯ åĴĮ æľ« ç«¯ æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġend Visible Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġinclude Visible ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġstart Visible Ġ&& Ġend Visible ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Visible Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Visible Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å±ķ å¼Ģ åĪĨ ç»Ħ æĿ¡ çĽ® åĲİ è¯¥ æĿ¡ çĽ® æĺ¯åĲ¦ æĺ¾ç¤º åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġexpand Visible Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¤§ éĥ¨åĪĨ æĥħåĨµä¸ĭ è¯¥ åĢ¼ åıª éĢĤ çĶ¨äºİ [ Grid LayoutManager ] ĠæĪĸ åħ¶å®ĥ èĩªå®ļä¹ī [ RecyclerView . LayoutManager ] ĊĠĠĠĠ Ġ* Ġ å¸ĥå±Ģ ç®¡çĲĨ åĻ¨ ä¸º [ Linear LayoutManager ] ĠåĴĮ Ġ[ St agger ed Grid LayoutManager ] ĠæĹ¶ ï¼Į è¯¥ åĢ¼ ä¼ļ éĢļè¿ĩ [ adjust Orientation ] èĩªåĬ¨ è°ĥæķ´ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġorientation Ġ= ĠDiv ider Orientation . HORIZONTAL ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĹè¡¨ æĺ¯åĲ¦ è¢« åıį è½¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠRecyclerView . LayoutManager . is Reverse Layout : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLinearLayoutManager Ġ-> Ġreverse Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġreverse Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġmargin Start Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġmargin End Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdivider : ĠDrawable ? Ġ= Ġnull ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" ç±»åŀĭ "> ĊĊĠĠĠ Ġvar Ġtype Pool : ĠMutable List < Int >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġon Enabled : Ġ( Binding Adapter . Binding ViewHolder . () Ġ-> ĠBoolean )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® åĽŀè°ĥ åĩ½æķ° æĿ¥ åĨ³å®ļ æĺ¯åĲ¦ åĲ¯çĶ¨ åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġblock Ġåĩ½æķ° è¿ĶåĽŀ åĢ¼ åĨ³å®ļ åıĤæķ° [ Binding Adapter . Binding ViewHolder ] å¯¹åºĶçļĦ Item æĺ¯åĲ¦ åĲ¯çĶ¨ åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Enabled ( block : ĠBinding Adapter . Binding ViewHolder . () Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Enabled Ġ= Ġblock ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ç±»åŀĭ åĲİ åıª åħģè®¸ è¯¥ ç±»åŀĭçļĦ æĿ¡ çĽ® æĺ¾ç¤º åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ* Ġä»İ æľª æ·»åĬł ç±»åŀĭ åĪĻ é»ĺè®¤ä¸º åħģè®¸ åħ¨éĥ¨ æĿ¡ çĽ® æĺ¾ç¤º åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Array Ġ å¸ĥå±Ģ Id , Ġ å¯¹åºĶ [ Binding Adapter . add Type ] ä¸ŃçļĦ åıĤæķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Type (@ Layout Res Ġvar arg Ġtype Array : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Pool Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Pool Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Enabled Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Pool ?. contains ( item ViewType ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtype Array . forEach Ġ{ Ġtype Pool ?. add ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" åĽ¾çīĩ "> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ åĽ¾çīĩ ä½ľä¸º åĪĨ åī² çº¿ , Ġ åĽ¾çīĩ å®½ é«ĺ åį³ åĪĨ åī² çº¿ å®½ é«ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawable ( drawable : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdivider Ġ= Ġdrawable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ åĽ¾çīĩ ä½ľä¸º åĪĨ åī² çº¿ , Ġ åĽ¾çīĩ å®½ é«ĺ åį³ åĪĨ åī² çº¿ å®½ é«ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Drawable (@ Drawable Res Ġdrawable Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= ĠContext Compat . get Drawable ( context , Ġdrawable Res ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Drawable Ġcannot Ġbe Ġfind ") ĊĠĠĠĠĠĠĠ Ġdivider Ġ= Ġdrawable ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" é¢ľèī² "> ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ é¢ľèī² , Ġå¦Ĥæŀľ ä¸į è®¾ç½® åĪĨ åī² çº¿ å®½åº¦ [ set Divider ] åĪĻ åĪĨ åī² çº¿ å®½åº¦ é»ĺè®¤ä¸º 1 px ĊĠĠĠĠ Ġ* Ġ æīĢ è° ĵ åĪĨ åī² çº¿ å®½åº¦ æĮĩ çļĦæĺ¯ åĪĨ åī² çº¿ çļĦ ç² Ĺ ç»Ĩ , Ġ èĢĮ éĿŀ æ°´ å¹³ å®½åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Color (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdivider Ġ= ĠColor Drawable ( color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ é¢ľèī² , Ġå¦Ĥæŀľ ä¸į è®¾ç½® åĪĨ åī² çº¿ å®½åº¦ [ set Divider ] åĪĻ åĪĨ åī² çº¿ å®½åº¦ é»ĺè®¤ä¸º 1 px ĊĠĠĠĠ Ġ* Ġ æīĢ è° ĵ åĪĨ åī² çº¿ å®½åº¦ æĮĩ çļĦæĺ¯ åĪĨ åī² çº¿ çļĦ ç² Ĺ ç»Ĩ , Ġ èĢĮ éĿŀ æ°´ å¹³ å®½åº¦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Ġ 1 6 è¿ĽåĪ¶ çļĦ é¢ľèī² åĢ¼ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Color ( color : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparse Color Ġ= ĠColor . parse Color ( color ) ĊĠĠĠĠĠĠĠ Ġdivider Ġ= ĠColor Drawable ( parse Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ é¢ľèī² , Ġå¦Ĥæŀľ ä¸į è®¾ç½® åĪĨ åī² çº¿ å®½åº¦ [ set Divider ] åĪĻ åĪĨ åī² çº¿ å®½åº¦ é»ĺè®¤ä¸º 1 px ĊĠĠĠĠ Ġ* Ġ æīĢ è° ĵ åĪĨ åī² çº¿ å®½åº¦ æĮĩ çļĦæĺ¯ åĪĨ åī² çº¿ çļĦ ç² Ĺ ç»Ĩ , Ġ èĢĮ éĿŀ æ°´ å¹³ å®½åº¦ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor Ġ é¢ľèī² èµĦæºĲ Id ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Color Res (@ Color Res Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolor Res Ġ= ĠContext Compat . getColor ( context , Ġcolor ) ĊĠĠĠĠĠĠĠ Ġdivider Ġ= ĠColor Drawable ( color Res ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbackground Ġ= ĠColor . TRANSP ARENT ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ æľī æĹ¶åĢĻ ä¼ļ åŃĺåľ¨ éĹ´ è·Ŀ ( ä¾ĭå¦Ĥ éħįç½® [ set Margin ]) æĪĸ å±ŀ äºİ èĻļ çº¿ , Ġ è¿Ļä¸ª æĹ¶åĢĻ æļ´ éľ ² åĩºæĿ¥ çļĦæĺ¯ RecyclerView çļĦ èĥĮæĻ¯ èī² , Ġ æīĢä»¥ æĪĳä»¬ åı¯ä»¥ è®¾ç½® ä¸Ģä¸ª èĥĮæĻ¯ èī² æĿ¥ è°ĥæķ´ ĊĠĠĠĠ Ġ* Ġåı¯ä»¥ è®¾ç½® èĥĮæĻ¯ èī² è§£åĨ³ ä¸į ç»Łä¸Ģ çļĦéĹ®é¢ĺ , Ġé»ĺè®¤ ä¸º éĢı æĺİ [ Color . TRANSP ARENT ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Background (@ Color Int Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= Ġcolor ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ æľī æĹ¶åĢĻ ä¼ļ åŃĺåľ¨ éĹ´ è·Ŀ ( ä¾ĭå¦Ĥ éħįç½® [ set Margin ]) æĪĸ å±ŀ äºİ èĻļ çº¿ , Ġ è¿Ļä¸ª æĹ¶åĢĻ æļ´ éľ ² åĩºæĿ¥ çļĦæĺ¯ RecyclerView çļĦ èĥĮæĻ¯ èī² , Ġ æīĢä»¥ æĪĳä»¬ åı¯ä»¥ è®¾ç½® ä¸Ģä¸ª èĥĮæĻ¯ èī² æĿ¥ è°ĥæķ´ ĊĠĠĠĠ Ġ* Ġåı¯ä»¥ è®¾ç½® èĥĮæĻ¯ èī² è§£åĨ³ ä¸į ç»Łä¸Ģ çļĦéĹ®é¢ĺ , Ġé»ĺè®¤ ä¸º éĢı æĺİ [ Color . TRANSP ARENT ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolor String Ġ é¢ľèī² çļĦ 1 6 è¿ĽåĪ¶ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Background ( color String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= ĠColor . parse Color ( color String ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unknown Ġcolor : Ġ$ color String ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ èĥĮæĻ¯ èī² ĊĠĠĠĠ Ġ* ĠåĪĨ åī² çº¿ æľī æĹ¶åĢĻ ä¼ļ åŃĺåľ¨ éĹ´ è·Ŀ ( ä¾ĭå¦Ĥ éħįç½® [ set Margin ]) æĪĸ å±ŀ äºİ èĻļ çº¿ , Ġ è¿Ļä¸ª æĹ¶åĢĻ æļ´ éľ ² åĩºæĿ¥ çļĦæĺ¯ RecyclerView çļĦ èĥĮæĻ¯ èī² , Ġ æīĢä»¥ æĪĳä»¬ åı¯ä»¥ è®¾ç½® ä¸Ģä¸ª èĥĮæĻ¯ èī² æĿ¥ è°ĥæķ´ ĊĠĠĠĠ Ġ* Ġåı¯ä»¥ è®¾ç½® èĥĮæĻ¯ èī² è§£åĨ³ ä¸į ç»Łä¸Ģ çļĦéĹ®é¢ĺ , Ġé»ĺè®¤ ä¸º éĢı æĺİ [ Color . TRANSP ARENT ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Background Res (@ Color Res Ġcolor : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Ġ= ĠContext Compat . getColor ( context , Ġcolor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" éĹ´ è·Ŀ "> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ åī² çº¿ å®½åº¦ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ ä½¿çĶ¨ [ set Drawable ] åĪĻ æĹł æķĪ ĊĠĠĠĠ Ġ* Ġ@ param Ġwidth ĠåĪĨ åī² çº¿ çļĦ å° º å¯ ¸ Ġ( åĪĨ åī² çº¿ åŀ Ĥ çĽ´ æĹ¶ ä¸º å®½ , Ġæ ° ´ å¹³ æĹ¶ ä¸º é«ĺ Ġ) ĊĠĠĠĠ Ġ* Ġ@ param Ġdp Ġæĺ¯åĲ¦ åįķä½į ä¸º dp , Ġé»ĺè®¤ ä¸º false åį³ ä½¿çĶ¨ åĥı ç´ł åįķä½į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Divider ( width : ĠInt Ġ= Ġ 1 , Ġdp : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . size Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdensity Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . size Ġ= Ġ( density Ġ* Ġwidth ). round ToInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® åĪĨ éļĶ å·¦ åı³ æĪĸ ä¸Ĭä¸ĭ éĹ´ è·Ŀ , Ġ ä¾Ŀ æį® åĪĨ åī² çº¿ ä¸º åŀ Ĥ çĽ´ æĪĸèĢħ æ°´ å¹³ åĨ³å®ļ åħ·ä½ĵ æĸ¹åĲĳ éĹ´ è·Ŀ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġstart ĠåĪĨ åī² çº¿ ä¸º æ°´ å¹³ åĪĻ æĺ¯ å·¦ éĹ´ è·Ŀ , Ġ åŀ Ĥ çĽ´ åĪĻ ä¸º ä¸Ĭ éĹ´ è·Ŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġend ĠåĪĨ åī² çº¿ ä¸º æ°´ å¹³ åĪĻ æĺ¯ åı³ éĹ´ è·Ŀ , Ġ åŀ Ĥ çĽ´ åĪĻ ä¸º ä¸ĭ éĹ´ è·Ŀ ĊĠĠĠĠ Ġ* Ġ@ param Ġdp Ġæĺ¯åĲ¦ åįķä½į ä¸º dp , Ġé»ĺè®¤ ä¸º true åį³ ä½¿çĶ¨ dp åįķä½į ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Margin ( start : ĠInt Ġ= Ġ 0 , Ġend : ĠInt Ġ= Ġ 0 , Ġdp : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . margin Start Ġ= Ġstart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . margin End Ġ= Ġend ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdensity Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . margin Start Ġ= Ġ( start Ġ* Ġdensity ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . margin End Ġ= Ġ( end Ġ* Ġdensity ). round ToInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// </ editor - fold > ĊĊĊĠĠĠ Ġ// < editor - fold Ġdesc =" è¦Ĩ åĨĻ "> ĊĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( ĊĠĠĠĠĠĠĠ Ġout Rect : ĠRect , ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġparent : ĠRecyclerView , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġparent . layout Manager Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġon Enabled ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= Ġparent . find Containing ViewHolder ( view ) Ġas ĠBinding Adapter . Binding ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel OrNull Ġ= Ġv h . getModel OrNull < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expand Visible Ġ&& Ġmodel OrNull Ġ!= Ġnull Ġ&& Ġmodel OrNull Ġis ĠItem Expand Ġ&& Ġmodel OrNull . item Expand ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . invoke ( vh )) Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( view ) ĊĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠRecyclerView . NO _ POSITION ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdivider Ġ= Ġdivider ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ== Ġnull Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Height Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Width Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsize ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ== Ġnull Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Width Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Height Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsize ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġreverse Layout Ġ= Ġlayout Manager . is Reverse Layout ĊĠĠĠĠĠĠĠ Ġval Ġedge Ġ= Ġcompute Edge ( position , Ġlayout Manager , Ġreverse Layout ) ĊĠĠĠĠĠĠĠ Ġadjust Orientation ( layout Manager ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . HORIZONTAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( end Visible Ġ&& Ġedge . top ) Ġ|| Ġ! edge . top ) Ġheight Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġedge . top ) Ġheight Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġedge . bottom ) Ġheight Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( end Visible Ġ&& Ġedge . bottom ) Ġ|| Ġ! edge . bottom ) Ġheight Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( 0 , Ġtop , Ġ 0 , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . VERTICAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( start Visible Ġ&& Ġedge . left ) Ġwidth Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġif Ġ(( end Visible Ġ&& Ġedge . right ) Ġ|| Ġ! edge . right ) Ġwidth Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( left , Ġ 0 , Ġright , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . GRID Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Group Count Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . span Size Lookup . get Span Group Index ( state . item Count Ġ- Ġ 1 , Ġspan Count ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġceil ( state . item Count Ġ/ Ġspan Count . toFloat ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Index Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . span Size Lookup . get Span Index ( position , Ġspan Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ( layout Manager . find View By Position ( position )?. layout Params Ġas ĠSt agger ed Grid LayoutManager . LayoutParams ). span Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Group Index Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . span Size Lookup . get Span Group Index ( position , Ġspan Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġceil (( position Ġ+ Ġ 1 ) Ġ/ Ġspan Count . toFloat ()). toInt () Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Size Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . span Size Lookup . get Span Size ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġlayout Manager . orientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġlayout Manager . orientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠRecyclerView . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . VERTICAL Ġ-> Ġwidth Ġ- Ġspan Index Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . HORIZONTAL Ġ-> Ġwidth Ġ- Ġspan Index Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġspan Index Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . VERTICAL Ġ-> Ġ( span Index Ġ+ Ġspan Size ) Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . HORIZONTAL Ġ-> Ġ( span Index Ġ+ Ġspan Size ) Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwidth Ġ- Ġ( span Index Ġ+ Ġspan Size ) Ġ* Ġwidth Ġ/ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . top ) Ġif Ġ( start Visible ) Ġheight Ġelse Ġ 0 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . left ) Ġif Ġ( end Visible ) Ġwidth Ġelse Ġ 0 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . VERTICAL Ġ-> Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( span Group Index Ġ+ Ġ 1 ) Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġspan Group Index Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġ( span Group Index Ġ+ Ġ 1 ) Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Group Index Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . bottom ) Ġif Ġ( start Visible ) Ġheight Ġelse Ġ 0 Ġelse Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . right ) Ġif Ġ( end Visible ) Ġwidth Ġelse Ġ 0 Ġelse Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Visible Ġ&& Ġorientation Ġ== ĠRecyclerView . VERTICAL Ġ-> Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġspan Group Index Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( span Group Index Ġ+ Ġ 1 ) Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Group Index Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ- Ġ( span Group Index Ġ+ Ġ 1 ) Ġ* Ġheight Ġ/ Ġspan Group Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġout Rect . set ( top , Ġleft , Ġbottom , Ġright ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġparent . layout Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġ== Ġnull Ġ|| Ġdivider Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġadjust Orientation ( layout Manager ) ĊĠĠĠĠĠĠĠ Ġval Ġreverse Layout Ġ= Ġlayout Manager . is Reverse Layout ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( orientation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . HORIZONTAL Ġ-> Ġdraw Horizontal ( canvas , Ġparent , Ġreverse Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . VERTICAL Ġ-> Ġdraw Vertical ( canvas , Ġparent , Ġreverse Layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Orientation . GRID Ġ-> Ġdraw Grid ( canvas , Ġparent , Ġreverse Layout ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// </ editor - fold > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩªåĬ¨ è°ĥæķ´ ä¸įåĲĮ å¸ĥå±Ģ ç®¡çĲĨ åĻ¨ åºĶè¯¥ å¯¹åºĶçļĦ [ orientation ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadjust Orientation ( layout Manager : ĠRecyclerView . LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġ! is ĠGrid LayoutManager Ġ&& Ġlayout Manager Ġis ĠLinearLayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( layout Manager Ġas ? ĠLinearLayoutManager )?. orientation Ġ== ĠRecyclerView . VERTICAL ) ĠDiv ider Orientation . HORIZONTAL Ġelse ĠDiv ider Orientation . VERTICAL ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( layout Manager Ġis ĠSt agger ed Grid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠDiv ider Orientation . GRID ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ æ°´ å¹³ åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Horizontal ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġreverse Layout : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġval Ġleft : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġright : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ( parent . clip To Padding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġparent . padding Left Ġ+ Ġthis . margin Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġparent . width Ġ- Ġparent . padding Right Ġ- Ġmargin End ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 Ġ+ Ġthis . margin Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġparent . width Ġ- Ġmargin End ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġparent . child Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġparent . getChild At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Enabled Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= Ġparent . getChild ViewHolder ( child ) Ġas ĠBinding Adapter . Binding ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel OrNull Ġ= Ġv h . getModel OrNull < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expand Visible Ġ&& Ġmodel OrNull Ġ!= Ġnull Ġ&& Ġmodel OrNull Ġis ĠItem Expand Ġ&& Ġmodel OrNull . item Expand ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġon Enabled ?. invoke ( vh ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġparent . layout Manager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Ġ= Ġcompute Edge ( position , Ġlayout Manager , Ġreverse Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ!= ĠDiv ider Orientation . GRID Ġ&& Ġ! end Visible Ġ&& Ġ( if Ġ( reverse Layout ) Ġedge . top Ġelse Ġedge . bottom )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor ated Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . get Decorated Bounds With Margins ( child , Ġdecor ated Bounds ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Top : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Bottom : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Bottom Ġ= Ġdecor ated Bounds . bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Top Ġ= Ġif Ġ( intrinsic Height Ġ== Ġ- 1 ) Ġfirst Bottom Ġ- Ġsize Ġelse Ġfirst Bottom Ġ- Ġintr insic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Top Ġ= Ġdecor ated Bounds . top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Bottom Ġ= Ġif Ġ( intrinsic Height Ġ== Ġ- 1 ) Ġfirst Top Ġ+ Ġsize Ġelse Ġfirst Top Ġ+ Ġintr insic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġdecor ated Bounds . top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( intrinsic Height Ġ== Ġ- 1 ) Ġtop Ġ+ Ġsize Ġelse Ġtop Ġ+ Ġintr insic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġdecor ated Bounds . bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( intrinsic Height Ġ== Ġ- 1 ) Ġbottom Ġ- Ġsize Ġelse Ġbottom Ġ- Ġintr insic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= ĠColor . TRANSP ARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġbackground ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġif Ġ( reverse Layout ) Ġedge . bottom Ġelse Ġedge . top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Rect Ġ= ĠRect ( parent . padding Left , Ġfirst Top , Ġparent . width Ġ- Ġparent . padding Right , Ġfirst Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( first Rect , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( parent . padding Left , Ġtop , Ġparent . width Ġ- Ġparent . padding Right , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġif Ġ( reverse Layout ) Ġedge . bottom Ġelse Ġedge . top ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( left , Ġfirst Top , Ġright , Ġfirst Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ åŀ Ĥ çĽ´ åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Vertical ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġreverse Layout : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĠĠĠĠĠĠĠ Ġval Ġtop : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġbottom : ĠInt ĊĊĠĠĠĠĠĠĠ Ġif Ġ( parent . clip To Padding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġparent . padding Top Ġ+ Ġmargin Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġparent . height Ġ- Ġparent . padding Bottom Ġ- Ġmargin End ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 Ġ+ Ġmargin Start ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġparent . height Ġ- Ġmargin End ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġparent . child Count ĊĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġparent . getChild At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Enabled Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= Ġparent . getChild ViewHolder ( child ) Ġas ĠBinding Adapter . Binding ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel OrNull Ġ= Ġv h . getModel OrNull < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expand Visible Ġ&& Ġmodel OrNull Ġ!= Ġnull Ġ&& Ġmodel OrNull Ġis ĠItem Expand Ġ&& Ġmodel OrNull . item Expand ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġon Enabled ?. invoke ( vh ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġparent . layout Manager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Ġ= Ġcompute Edge ( position , Ġlayout Manager , Ġreverse Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ!= ĠDiv ider Orientation . GRID Ġ&& Ġ! end Visible Ġ&& Ġedge . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecor ated Bounds Ġ= ĠRect () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . get Decorated Bounds With Margins ( child , Ġdecor ated Bounds ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Right Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intrinsic Width Ġ== Ġ- 1 ) Ġdecor ated Bounds . left Ġ+ Ġsize Ġelse Ġdecor ated Bounds . left Ġ+ Ġintr insic Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Left Ġ= Ġdecor ated Bounds . left ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġ( decor ated Bounds . right Ġ+ Ġchild . translation X ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġif Ġ( intrinsic Width Ġ== Ġ- 1 ) Ġright Ġ- Ġsize Ġelse Ġright Ġ- Ġintr insic Width ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background Ġ!= ĠColor . TRANSP ARENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠPaint () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . color Ġ= Ġbackground ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġedge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Rect Ġ= ĠRect ( first Left , Ġparent . padding Top , Ġfirst Right , Ġparent . height Ġ- Ġparent . padding Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( first Rect , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrect Ġ= ĠRect ( left , Ġparent . padding Top , Ġright , Ġparent . height Ġ- Ġparent . padding Bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( rect , Ġpaint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Visible Ġ&& Ġedge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( first Left , Ġtop , Ġfirst Right , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( left , Ġtop , Ġright , Ġbottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĺ åĪ¶ ç½ĳ æł¼ åĪĨ åī² çº¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdraw Grid ( canvas : ĠCanvas , Ġparent : ĠRecyclerView , Ġreverse Layout : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas . save () ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġparent . child Count ĊĊĠĠĠĠĠĠĠ Ġloop @ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġparent . getChild At ( i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Enabled Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv h Ġ= Ġparent . getChild ViewHolder ( child ) Ġas ĠBinding Adapter . Binding ViewHolder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodel OrNull Ġ= Ġv h . getModel OrNull < Any >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! expand Visible Ġ&& Ġmodel OrNull Ġ!= Ġnull Ġ&& Ġmodel OrNull Ġis ĠItem Expand Ġ&& Ġmodel OrNull . item Expand ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenabled Ġ= Ġon Enabled ?. invoke ( vh ) Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! enabled ) Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild Adapter Position ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Ġ== ĠRecyclerView . NO _ POSITION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . invalidate Item Decor ations () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ loop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġparent . layout Manager Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedge Ġ= Ġcompute Edge ( position , Ġlayout Manager , Ġreverse Layout ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdivider Ġ= Ġdivider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ== Ġnull Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Height Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Width Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Ġ== Ġnull Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Width Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Width ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . intrinsic Height Ġ!= Ġ- 1 Ġ-> Ġdivider . intrinsic Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġchild . layout Params Ġas ĠRecyclerView . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . left Ġ+ Ġlayout Params . left Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . top Ġ+ Ġlayout Params . top Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . right Ġ+ Ġlayout Params . right Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . bottom Ġ+ Ġlayout Params . bottom Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! end Visible Ġ&& Ġedge . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . top Ġ- Ġheight , Ġbounds . right Ġ- Ġmargin End , Ġbounds . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! end Visible Ġ&& Ġ! edge . top Ġ&& Ġedge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ+ Ġmargin Start , Ġbounds . top Ġ- Ġheight , Ġbounds . right Ġ+ Ġwidth , Ġbounds . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! edge . top Ġ|| Ġ( start Visible Ġ&& Ġedge . top )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . top Ġ- Ġheight , Ġbounds . right Ġ+ Ġwidth , Ġbounds . top ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! end Visible Ġ&& Ġedge . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . bottom , Ġbounds . right Ġ- Ġmargin End , Ġbounds . bottom Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! end Visible Ġ&& Ġ! edge . bottom Ġ&& Ġedge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ+ Ġmargin Start , Ġbounds . bottom , Ġbounds . right Ġ+ Ġwidth , Ġbounds . bottom Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! edge . bottom Ġ|| Ġ( start Visible Ġ&& Ġedge . bottom )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . bottom , Ġbounds . right Ġ+ Ġwidth , Ġbounds . bottom Ġ+ Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . top Ġ&& Ġ! end Visible Ġ&& Ġ! edge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . top Ġ+ Ġmargin Start , Ġbounds . left , Ġbounds . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( edge . bottom Ġ&& Ġ! end Visible Ġ&& Ġ! edge . left ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . top , Ġbounds . left , Ġbounds . bottom Ġ- Ġmargin End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! edge . left Ġ|| Ġ( end Visible Ġ&& Ġedge . left )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . left Ġ- Ġwidth , Ġbounds . top , Ġbounds . left , Ġbounds . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġright ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edge . top Ġ&& Ġ! end Visible Ġ&& Ġ! edge . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . right , Ġbounds . top Ġ+ Ġmargin Start , Ġbounds . right Ġ+ Ġwidth , Ġbounds . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( edge . bottom Ġ&& Ġ! end Visible Ġ&& Ġ! edge . right ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . right , Ġbounds . top , Ġbounds . right Ġ+ Ġwidth , Ġbounds . bottom Ġ- Ġmargin End ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! edge . right Ġ|| Ġ( end Visible Ġ&& Ġedge . right )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( bounds . right , Ġbounds . top , Ġbounds . right Ġ+ Ġwidth , Ġbounds . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . restore () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪĹè¡¨ æĿ¡ çĽ® æĺ¯åĲ¦ éĿ ł è¿ĳ è¾¹ ç¼ ĺ çļĦ ç»ĵ ç®Ĺ ç»ĵæŀľ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġleft Ġæĺ¯åĲ¦ éĿ ł å·¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġright Ġæĺ¯åĲ¦ éĿ ł å·¦ ĊĠĠĠĠ Ġ* Ġ@ param Ġtop Ġæĺ¯åĲ¦ éĿ ł é¡¶ ĊĠĠĠĠ Ġ* Ġ@ param Ġbottom Ġæĺ¯åĲ¦ éĿ ł åºķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠEdge ( ĊĠĠĠĠĠĠĠ Ġvar Ġleft : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġtop : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġright : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġvar Ġbottom : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ è®¡ç®Ĺ æĮĩå®ļ æĿ¡ çĽ®çļĦ è¾¹ ç¼ ĺ ä½įç½® ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġposition ĠæĮĩå®ļ è®¡ç®Ĺ çļĦ Item ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlayout Manager Ġå½ĵåīį åĪĹè¡¨ çļĦ LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcompute Edge ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager : ĠRecyclerView . LayoutManager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠEdge Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġposition Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Count Ġ= Ġlayout Manager . item Count ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEdge (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( layout Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSt agger ed Grid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Index Ġ= Ġ( layout Manager . find View By Position ( position )?. layout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠSt agger ed Grid LayoutManager . LayoutParams ). span Index Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager . orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġspan Index Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġspan Index Ġ== Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġindex Ġ> Ġitem Count Ġ- Ġspan Count Ġelse Ġindex Ġ<= Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġindex Ġ<= Ġspan Count Ġelse Ġindex Ġ> Ġitem Count Ġ- Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġindex Ġ<= Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġindex Ġ> Ġitem Count Ġ- Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġspan Index Ġ== Ġspan Count Ġelse Ġspan Index Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġspan Index Ġ== Ġ 1 Ġelse Ġspan Index Ġ== Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGrid LayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Size Lookup Ġ= Ġlayout Manager . span Size Lookup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġlayout Manager . span Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Group Index Ġ= Ġspan Size Lookup . get Span Group Index ( position , Ġspan Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Span Group Index Ġ= Ġceil ( item Count Ġ/ Ġspan Count . toFloat ()). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Index Ġ= Ġspan Size Lookup . get Span Index ( position , Ġspan Count ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspan Size Ġ= Ġspan Size Lookup . get Span Size ( position ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager . orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġspan Index Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġspan Index Ġ+ Ġspan Size Ġ- Ġ 1 Ġ== Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Group Index Ġ== Ġmax Span Group Index Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ<= Ġspan Count Ġ&& Ġspan Group Index Ġ== Ġspan Size Lookup . get Span Group Index ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ<= Ġspan Count Ġ&& Ġspan Group Index Ġ== Ġspan Size Lookup . get Span Group Index ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Group Index Ġ== Ġmax Span Group Index Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġspan Group Index Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġspan Group Index Ġ== Ġmax Span Group Index Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġspan Index Ġ+ Ġspan Size Ġ- Ġ 1 Ġ== Ġspan Count Ġelse Ġspan Index Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġspan Index Ġ== Ġ 1 Ġelse Ġspan Index Ġ+ Ġspan Size Ġ- Ġ 1 Ġ== Ġspan Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLinearLayoutManager Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( layout Manager . orientation Ġ== ĠRecyclerView . VERTICAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( reverse Layout ) Ġindex Ġ== Ġitem Count Ġelse Ġindex Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġif Ġ( reverse Layout ) Ġindex Ġ== Ġ 1 Ġelse Ġindex Ġ== Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġindex Ġ== Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġindex Ġ== Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }