package Ġxc . common . view lib . view . custom view čĊč Ċ import Ġandroid . graphics . Canvas č Ċ import Ġandroid . graphics . Color č Ċ import Ġandroid . graphics . Paint č Ċ import Ġandroid . graphics . Rect č Ċ import Ġandroid . view . View č Ċ import Ġandroidx . core . view . View Compat č Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager č Ċ import Ġandroidx . recyclerview . widget . RecyclerView čĊč Ċ class ĠGrid Divider Ġ: ĠRecyclerView . Item Decoration Ġ{ čĊčĊĠĠĠ Ġclass ĠBuilder Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdivider Width Ġ= Ġ 1 0 čĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġdivider Color Ġ= ĠColor . parse Color ("# 0 0 0 0 0 0 ") čĊčĊĠĠĠĠĠĠĠ Ġfun Ġset Divider Width ( int : ĠInt ): ĠBuilder Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Width Ġ= Ġint čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfun Ġset Divider Color ( color : ĠInt ): ĠBuilder Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdivider Color Ġ= Ġcolor čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠGrid Divider Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGrid Divider ( divider Width , Ġdivider Color ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġconstructor ( divider Width : ĠInt , Ġdivider Color : ĠInt ) Ġ: Ġsuper () Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . divider Width Ġ= Ġdivider Width čĊĠĠĠĠĠĠĠ Ġset Divider Color ( divider Color ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġvar Ġdivider Width Ġ= Ġ 1 0 čĊĠĠĠ Ġprivate Ġvar Ġdivider Paint Ġ= ĠPaint () čĊčĊĠĠĠ Ġfun Ġget Divider Width (): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġdivider Width čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġset Divider Color ( color : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġdivider Paint . color Ġ= Ġcolor čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . getItem Offsets ( out Rect , Ġview , Ġparent , Ġstate ) čĊĠĠĠĠĠĠĠ Ġif Ġ( parent . layout Manager Ġis ĠGrid LayoutManager ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Grid ( out Rect , Ġview , Ġparent , Ġstate , Ġparent . layout Manager Ġas ĠGrid LayoutManager ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinit Grid ( out Rect : ĠRect , Ġview : ĠView , Ġparent : ĠRecyclerView , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State , Ġgrid LayoutManager : ĠGrid LayoutManager ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġspan Count Ġ= Ġgrid LayoutManager . span Count čĊĠĠĠĠĠĠĠ Ġval ĠindexOf Child Ġ= Ġparent . indexOf Child ( view ) č Ċ // ĠĠĠĠĠĠĠ ĠSW Log . e ( out Rect . toString ()) č Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( view . getTag () Ġ!= Ġnull ) Ġ{ č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn č Ċ // ĠĠĠĠĠĠĠ Ġ} č Ċ // ĠĠĠĠĠĠĠ ĠSW Log . e ("${ view . meas ured Width } Ġ Ġ${ view . meas ured Height } Ġview . getTag Ġ${ view . getTag ()} Ġ") čĊčĊčĊĠĠĠĠĠĠĠ Ġval Ġfl Ġ= Ġdivider Width čĊĠĠĠĠĠĠĠ Ġout Rect . top Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġout Rect . bottom Ġ= Ġfl . toInt () čĊĠĠĠĠĠĠĠ Ġout Rect . left Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġout Rect . right Ġ= Ġfl . toInt () čĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢ åı³ è¾¹ čĊĠĠĠĠĠĠĠ Ġif Ġ(( indexOf Child Ġ+ Ġ 1 ) Ġ% Ġspan Count Ġ== Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . right Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setTag ( ViewType . RIGHT ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . setTag ( ViewType . EMPTY ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢ ä¸ĭ è¾¹ čĊĠĠĠĠĠĠĠ Ġif Ġ( indexOf Child Ġ>= Ġparent . adapter !!. item Count Ġ- Ġ( parent . adapter !!. item Count Ġ% Ġspan Count )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . bottom Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Draw ( c : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( c , Ġparent , Ġstate ) čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. ( parent . child Count Ġ- Ġ 1 )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild At Ġ= Ġparent . getChild At ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrect Ġ= ĠRect () č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġchild At . get Drawing Rect ( rect ) č Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġparent . getChild Visible Rect ( child At , Ġrect , Ġnull ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . top Ġ= ĠView Compat . getY ( child At ). toInt () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . left Ġ= ĠView Compat . getX ( child At ). toInt () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . bottom Ġ= ĠView Compat . getY ( child At ). toInt () Ġ+ Ġchild At . meas ured Height čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrect . right Ġ= ĠView Compat . getX ( child At ). toInt () Ġ+ Ġchild At . meas ured Width čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child At . getTag () Ġ== ĠView Type . RIGHT ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ä¸ĭ è¾¹ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Rect ( Rect ( rect . left , Ġrect . bottom , Ġrect . right , Ġrect . bottom Ġ+ Ġdivider Width ), Ġdivider Paint ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» åı³ è¾¹ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Rect ( Rect ( rect . right , Ġrect . top , Ġrect . right Ġ+ Ġdivider Width , Ġrect . bottom Ġ+ Ġdivider Width ), Ġdivider Paint ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ» ä¸ĭ è¾¹ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . draw Rect ( Rect ( rect . left , Ġrect . bottom , Ġrect . right , Ġrect . bottom Ġ+ Ġdivider Width ), Ġdivider Paint ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġenum Ġclass ĠView Type Ġ{ čĊĠĠĠĠĠĠĠ ĠRIGHT , ĠEMPTY čĊĠĠĠ Ġ} čĊčĊč Ċ }