package Ġcom . example . float button . function 7 Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . view . get Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* Ġdescription : åĪĨ ç»Ħ + å¤´ éĥ¨ åĲ ¸ éĻĦ Ċ Ġ* Ċ Ġ* Ġ@ author Ġz wp Ċ Ġ* Ġ@ since Ġ 2 0 2 1 / 2 / 2 0 Ċ Ġ*/ Ċ class ĠGroup Item Decoration ( var Ġgroup Data : ĠArrayList < Group Bean >) Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĊĠĠĠ Ġval Ġhead Height Ġ= Ġ 1 0 0 ĊĠĠĠ Ġval Ġpaint : ĠPaint Ġ= ĠPaint () ĊĠĠĠ Ġval Ġpaint 2 Ġ= ĠPaint () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpaint . color Ġ= ĠColor . BLACK ĊĠĠĠĠĠĠĠ Ġpaint . style Ġ= ĠPaint . Style . FILL _ AND _ ST RO KE ĊĠĠĠĠĠĠĠ Ġpaint . stroke Width Ġ= Ġ 2 F ĊĠĠĠĠĠĠĠ Ġpaint . text Size Ġ= Ġ 5 0 F ĊĊĠĠĠĠĠĠĠ Ġpaint 2 . color Ġ= ĠColor . WHITE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( c : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( c , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġparent . child Count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġchild Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġparent . getChild At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġparent . getChild Adapter Position ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġgroup Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ æ³¨æĦı ï¼ļ i ä¸İ index åĢ¼ åı¯èĥ½ ä¸įåĲĮ ï¼Į parent . child Count èİ·åıĸ çļĦ view æķ°éĩı ä¸įæĺ¯ Item çļĦ æĢ» æķ° ï¼Į èĢĮ æĺ¯ view çļĦ æĢ» æķ° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bean . first Item Position Ġ== Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Title View ( c , Ġview . top Ġ- Ġ 1 0 0 , Ġbean . group Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Over ( c : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw Over ( c , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠ Ġ// 1 ãĢģ ç¡®å®ļ ç¬¬ä¸Ģä¸ª item å±ŀ äºİ åĵª ä¸ª group ĊĠĠĠĠĠĠĠ Ġ// 2 ãĢģ ç¡®å®ļ æľ¬ é¡µ éĩĮéĿ¢ æľī æ²¡æľī ä¸ĭ ä¸ª group , ä¸ĭ ä¸ª group çļĦ å¤´ éĥ¨ åľ¨ åĵª ĊĠĠĠĠĠĠĠ Ġvar Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Group Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġfirst Position Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent . layout Manager Ġas ĠLinearLayoutManager ). findFirst Visible Item Position () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġgroup Data . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Position Ġ>= Ġgroup Data [ i ]. first Item Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġgroup Data [ i ]. group Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( current Group Ġ!= Ġgroup Data . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( group Data [ current Group Ġ+ Ġ 1 ]. first Item Position Ġ<= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent . layout Manager Ġas ĠLinearLayoutManager ). find Last Visible Item Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// é¡µéĿ¢ ä¸Ń æľī ä¸ĭ ä¸Ģ ç»Ħ çļĦæķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( parent . layout Manager Ġas ĠLinearLayoutManager ). find View By Position ( group Data [ current Group Ġ+ Ġ 1 ]. first Item Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġif Ġ( it . top Ġ- Ġ 1 0 0 Ġ> Ġhead Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¢ ° æĴ ŀ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . top Ġ- Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġc . draw Rect ( 0 F , Ġtop . toFloat (), Ġparent . width . toFloat (), Ġtop Ġ+ Ġhead Height . toFloat (), Ġpaint 2 ) ĊĠĠĠĠĠĠĠ Ġc . draw Text ( title , Ġ 0 F , Ġtop Ġ+ Ġ 8 0 F , Ġpaint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Offsets ( ĊĠĠĠĠĠĠĠ Ġout Rect : ĠRect , ĊĠĠĠĠĠĠĠ Ġview : ĠView , ĊĠĠĠĠĠĠĠ Ġparent : ĠRecyclerView , ĊĠĠĠĠĠĠĠ Ġstate : ĠRecyclerView . State ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . getItem Offsets ( out Rect , Ġview , Ġparent , Ġstate ) ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġparent . getChild ViewHolder ( view ). adapter Position ĊĠĠĠĠĠĠĠ Ġfor Ġ( bean Ġin Ġgroup Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bean . first Item Position Ġ== Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Rect . set ( 0 , Ġhead Height , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġout Rect . set ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Title View ( c : ĠCanvas , Ġtop : ĠInt , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġc . draw Text ( title , Ġ 0 F , Ġtop Ġ+ Ġ 8 0 F , Ġpaint ) ĊĠĠĠ Ġ} Ċ }