package Ġcom . fal ten re ich . skeleton layout . recyclerview Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . fal ten re ich . skeleton layout . Skeleton Layout Ċ import Ġcom . fal ten re ich . skeleton layout . create Skeleton Ċ Ċ internal Ġclass ĠS keleton RecyclerView Adapter ( ĊĠĠĠĠĠĠĠ Ġ@ Layout Res Ġprivate Ġval Ġlayout Res Id : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġitem Count : ĠInt , ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġprivate Ġval Ġmask Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcorner Radius : ĠFloat , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshow Sh im mer : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġ@ Color Int Ġprivate Ġval Ġshim mer Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshim mer Duration In Millis : ĠLong Ċ ) Ġ: ĠRecyclerView . Adapter < Skeleton RecyclerView Holder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġmeasured Ġ= Ġitem Count Ġ!= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠS keleton RecyclerView Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorigin View Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( layout Res Id , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġskeleton Ġ= Ġorigin View . create Skeleton ( mask Color , Ġcorner Radius , Ġshow Sh im mer , Ġshim mer Color , Ġshim mer Duration In Millis ) Ġas ĠS keleton Layout ĊĠĠĠĠĠĠĠ Ġskeleton . layout Params Ġ= Ġorigin View . layout Params ĊĠĠĠĠĠĠĠ Ġskeleton . show Skeleton () ĊĠĠĠĠĠĠĠ Ġ// ĠAutomatic Ġcalc Ġthe Ġskeleton Ġitem Ġcount ĊĠĠĠĠĠĠĠ Ġif Ġ(! meas ured ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem Height Ġ= Ġskeleton . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparent Height Ġ= Ġparent . height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalc ItemCount Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Height Ġ!= Ġ 0 Ġ&& Ġparent Height Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmeasured Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Count Ġ= Ġparent Height Ġ/ Ġitem Height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠView . On Layout ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Layout Change ( v : ĠView ?, Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt , Ġold Left : ĠInt , Ġold Top : ĠInt , Ġold Right : ĠInt , Ġold Bottom : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( top Ġ!= Ġbottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton . remove On Layout ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( v ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton Ġ-> Ġitem Height Ġ= Ġbottom Ġ- Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ-> Ġparent Height Ġ= Ġbottom Ġ- Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalc ItemCount () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskeleton . add On Layout ChangeListener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Height Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . add On Layout ChangeListener ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalc ItemCount () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠS keleton RecyclerView Holder ( skeleton ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠS keleton RecyclerView Holder , Ġposition : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( meas ured ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġitem Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }