package Ġcom . ye on ky u . Hold able Swipe Helper Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . Motion Event Ċ import Ġandroidx . annotation . Color Int Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ class ĠHold able Swipe Handler Ġprivate Ġconstructor ( builder : ĠBuilder ) Ġ: ĊĠĠĠ ĠItem Touch Helper . Simple Callback ( 0 , ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġsw ip ed Background Holder : ĠSw ip ed Background Holder Ġ= Ġbuilder . sw ip ed Background Holder ĊĠĠĠ Ġprivate Ġval Ġbutton Action : ĠSw ipe Button Action Ġ= Ġbuilder . button Action !! ĊĠĠĠ Ġprivate Ġvar Ġfirst Item Dismiss Flag : ĠBoolean Ġ= Ġbuilder . first Item Dismiss Flag ĊĠĠĠ Ġprivate Ġval Ġexclude ViewType Set : ĠSet < Int > Ġ= Ġbuilder . exclude ViewType Set ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent ViewHolder : ĠRecyclerView . ViewHolder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġabsolute Dx Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġscoped X Ġ= Ġ 0 f ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd RecyclerView Decoration ( builder . re cyclerView !! ) ĊĠĠĠĠĠĠĠ Ġadd RecyclerView Listener ( builder . re cyclerView !! ) ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Touch Helper Ġ= ĠItem Touch Helper ( this ) ĊĠĠĠĠĠĠĠ Ġitem Touch Helper . attach To RecyclerView ( builder . re cyclerView !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠBuilder ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġsw ip ed Background Holder Ġ= ĠSw ip ed Background Holder ( context ) ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġbutton Action : ĠSw ipe Button Action ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġfirst Item Dismiss Flag Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġexclude ViewType Set Ġ= Ġmutable Set Of < Int >() ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Swipe Button Action ( swipe Button Action : ĠSw ipe Button Action ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . button Action Ġ= Ġswipe Button Action ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset On RecyclerView ( re cyclerView : ĠRecyclerView ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . re cyclerView Ġ= Ġre cyclerView ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġdefault Ġvalue Ġ: Ġ 1 8 f Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset First Item Side Margin Dp ( value : ĠInt ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . first Item Side Margin Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġdefault ĠIcon Ġ: Ġdelete Ġicon Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset First Item Drawable ( drawable : ĠDrawable ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . first Icon Ġ= Ġdrawable ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġdefault Ġcolor Ġ: Ġp ink Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġset BackgroundColor ( color String : ĠString ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . backgroundColor Ġ= ĠColor . parse Color ( color String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset BackgroundColor (@ Color Int Ġcolor : ĠInt ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . backgroundColor Ġ= Ġcolor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġexclude From Hold able ViewHolder ( item ViewType : ĠInt ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . exclude ViewType Set . add ( item ViewType ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Dismiss OnClick First Item ( value Ġ: ĠBoolean ) Ġ= Ġthis . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Item Dismiss Flag Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠHold able Swipe Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( button Action Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Swipe Button Action Ġshould Ġbe Ġimplemented . ĠDid Ġyou Ġforget Ġto Ġcall Ġadd Swipe Button Action () ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re cyclerView Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" RecyclerView Ġshould Ġbe Ġset Ġto ĠHold able Swipe Handler . ĠDid Ġyou Ġforget Ġto Ġcall Ġset On RecyclerView () ?") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHold able Swipe Handler ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder , ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġ/** Ġre cycler view ìĿĺ Ġview ê°Ģ Ġë°ĺ ìĿ ĳ íķĺìĹ¬ Ġon Draw () íķł ĠëķĮ Ġì ½ ľ ë° ± ëĲĺëĬĶ Ġíķ¨ìĪĺ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Child Draw ( ĊĠĠĠĠĠĠĠ Ġcanvas : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġd Y : ĠFloat , ĊĠĠĠĠĠĠĠ Ġaction State : ĠInt , ĊĠĠĠĠĠĠĠ Ġis Currently Active : ĠBoolean , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( exclude ViewType Set . contains ( view Holder . item ViewType )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġabsolute Dx Ġ= Ġd X ĊĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . update Holder Width () ĊĊĠĠĠĠĠĠĠ Ġval Ġis Hold ing Ġ= Ġget ViewHolder Tag ( view Holder ) ĊĠĠĠĠĠĠĠ Ġscoped X Ġ= Ġhold View Position Horizontal ( dX , Ġis Hold ing ) ĊĊĠĠĠĠĠĠĠ ĠviewHolder . item View . translation X Ġ= Ġscoped X ĊĊĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . draw Hold ing Background ( canvas , ĠviewHolder , Ġscoped X . toInt ()) ĊĠĠĠĠĠĠĠ Ġcurrent ViewHolder Ġ= ĠviewHolder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġswipe Ġíķ´ ìĦľ ĠìĨ Ĳ ìĿĦ Ġë ĸ ¼ ìĹĪ ìĿĦ ĠëķĮ Ġì ½ ľ ë° ± ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* Ġset ViewHolder Tag () ë¥¼ ĠìĦ¤ìłķ íķľëĭ¤ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Swipe Threshold ( view Holder : ĠRecyclerView . ViewHolder ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( absolute Dx Ġ<= Ġ- sw ip ed Background Holder . holder Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ViewHolder Tag ( view Holder , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġìłķ íĻ ķ íŀĪ Ġcurrent Dx ê°Ģ Ġright Width ë§Į íģ ¼ Ġëĭ ¹ ê² ¨ ìł¸ ìķ¼ íķĺëĬĶ ì§Ģ , Ġê·¸ Ġì¤ĳ ê°Ħ ìĿ´ ĠëĲ ł ì§Ģ ëĬĶ Ġì¶Ķê°Ģ Ġëħ ¼ ìĿĺ íķ Ħ ìļĶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ViewHolder Tag ( view Holder , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ 2 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Swipe Velocity Threshold ( defaultValue : ĠFloat ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠìĤ¬ìļ©ìŀĲ Ġinteraction ìĿ´ Ġë ģ Ŀ ë Ĥ¬ ìĿĦ ë ķĮ Ġíĺ¸ì¶ľ ëĲ ¨ ( ìĬ¤ ìĻĢ ìĿ´ íĶĦ Ġëĵ± Ġíı¬ íķ¨ ) ĊĠĠĠĠ Ġ* Ġíķĺ ì§Ģë§Į Ġclear View () ëĬĶ Ġon Child Draw () ê°Ģ Ġê± ° ìĿĺ ĠìĻ Ħ ìłĦ íŀĪ Ġë ģ Ŀ ë Ĥ¬ ìĿĦ ë ķĮ Ġíĺ¸ì¶ľ ëĲĺ ê¸° ĠëķĮë¬¸ìĹĲ ĊĠĠĠĠ Ġ* ĠìĹ¬ ê¸° ìĦľ Ġset ViewHolder () ĠìĦ¸ íĮ ħ ìĿĦ íķĺë©´ Ġui Ġìłģìļ© ìĿ´ ĠìķĪ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ* ĠëĺĲ íķľ Ġget Swipe Threshold () Ġë³´ ëĭ¤ ĠëĬ ¦ ê²Į Ġíĺ¸ì¶ľ ëĲľ ëĭ¤ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġclear View ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent ViewHolder ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get ViewHolder Tag ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd First ItemClickListener ( re cyclerView , ĠviewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġholding ĠëĲĺ ìĸ´ ĠíĻ Ķ ë©´ ìĹĲ Ġê± ¸ ì ³ Ĳ ìŀ Ī ìľ¼ ë©´ Ġtag Ġë ¥ ¼ Ġtrue Ġë¡ľ Ġë ĳ Ķ ëĭ¤ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset ViewHolder Tag ( view Holder : ĠRecyclerView . ViewHolder , Ġis Hold ing : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder . item View . tag Ġ= Ġis Hold ing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠíĺĦ ìŀ¬ ĠìĿ¸ ìŀĲ ë¡ľ Ġë°Ľ ìĿĢ Ġë · ° íĻ Ģ ëįĶ ê°Ģ ĠíĻ Ķ ë©´ ìĹĲ Ġê± ¸ ì ³ Ĳ ìŀ Ī ëĬĶ ì§Ģë¥¼ Ġë°ĺíĻĺ íķľëĭ¤ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget ViewHolder Tag ( view Holder : ĠRecyclerView . ViewHolder ?) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠviewHolder ?. item View ?. tag Ġas ? ĠBoolean Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhold View Position Horizontal ( ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġis Hold ing : ĠBoolean ĊĠĠĠ Ġ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmin : ĠFloat Ġ= Ġ- sw ip ed Background Holder . holder Width . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġif Ġ( is Hold ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd X Ġ- Ġsw ip ed Background Holder . holder Width ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd X ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . min ( Math . max ( min , Ġx ), Ġmax ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġadd First ItemClickListener ( re cyclerView : ĠRecyclerView , ĠviewHolder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . setOn Touch Listener Ġ{ Ġ_, Ġdown Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( down Event . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sw ip ed Background Holder . is First Item Area ( down Event . x . toInt (), Ġdown Event . y . toInt ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . setOn Touch Listener Ġ{ Ġ_, Ġup Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( up Event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sw ip ed Background Holder . is First Item Area ( up Event . x . toInt (), Ġup Event . y . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġget ViewHolder Tag ( view Holder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Item Dismiss Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Current ViewHolder Immediate ly () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Holder . absolute Adapter Position Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Action . onClick First Button ( view Holder . absolute Adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġadd RecyclerView Listener ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Item Touch Listener ( object Ġ: ĠRecyclerView . On Item Touch Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( rv : ĠRecyclerView , Ġe : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv . find Child View Under ( e . x , Ġe . y )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġrv . getChild ViewHolder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Holder . absolute Adapter Position Ġ!= Ġcurrent ViewHolder ?. absolute Adapter Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Current ViewHolder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Touch Event ( rv : ĠRecyclerView , Ġe : ĠMotion Event ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Request Dis allow Intercept Touch Event ( dis allow Intercept : ĠBoolean ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Current ViewHolder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd RecyclerView Decoration ( re cyclerView : ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . addItem Decoration ( object Ġ: ĠRecyclerView . Item Decoration () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Draw ( c : ĠCanvas , Ġparent : ĠRecyclerView , Ġstate : ĠRecyclerView . State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ViewHolder ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( get ViewHolder Tag ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsw ip ed Background Holder . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Hold ing Background ( c , Ġit , Ġscoped X . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcurrent ViewHolder Ġë ¥ ¼ Ġnull Ġë¡ľ ĠëĳĲ ë©´ Ġre cyclerView ĠìĿĺ ĊĠĠĠĠ Ġ* ĠItem Decoration ĠìĿĺ Ġon Draw () ê°Ģ Ġìłķ ìĥģ Ġë¡ľ ì§ģ ĠìĪĺ íĸī ìĿĦ Ġëª » íķľëĭ¤ ĊĠĠĠĠ Ġ* ĠëĶ°ëĿ¼ ìĦľ Ġì ¦ ī ê°ģ ĠìĤ Ń ìłľ ëĲĺëĬĶ Ġìĥģ íĻ © ìĹĲìĦľëĬĶ Ġcurrent ViewHolder Ġë ¥ ¼ Ġnull Ġë¡ľ ĠëĳĲ ì§Ģ ĠìķĬ ëĬĶ ëĭ¤ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġrelease Current ViewHolder Immediate ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent ViewHolder ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ViewHolder Tag ( this , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . translation X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Current ViewHolder () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠíĺĦ ìŀ¬ ĠìķĦ ìĿ´ íĥ ¬ Ġholding Ġìłľ ê±° ĊĠĠĠĠĠĠĠ Ġcurrent ViewHolder ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ViewHolder Tag ( this , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . animate (). translation X ( 0 f ). duration Ġ= Ġ 3 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent ViewHolder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }