package Ġbe . hog ent . fa ith . fa ith . sky sc raper . goal Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġbe . hog ent . fa ith . R Ċ Ċ /** Ċ Ġ* Ġhttps :// medium . com /@ ipa ul pro / drag - and - swipe - with - recyclerview - b 9 4 5 6 d 2 b 1 aaf Ċ Ġ* ĠList ens Ġfor Ġmove Ġand Ġswipe Ġevents , Ġto Ġenable Ġdrag Ġ& Ġdrop Ġand Ġswipe Ġto Ġdismiss Ċ Ġ*/ Ċ class ĠItem Touch Helper Callback ( private Ġval Ġadapter : ĠI Item Touch Helper , Ġprivate Ġval Ġcontext : ĠContext ) Ġ: ĊĠĠĠ ĠItem Touch Helper . Callback () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġdrag From Position Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġdrag To Position Ġ= Ġ- 1 ĊĊĠĠĠ Ġ// Ġto Ġstart Ġdragging Ġitems ĊĠĠĠ Ġoverride Ġfun Ġis Long Press Drag Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġto Ġenable Ġsw ip ing ĊĠĠĠ Ġoverride Ġfun Ġis Item View Swipe Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrag Flags Ġ= ĠItem Touch Helper . UP Ġor ĠItem Touch Helper . DOWN ĊĠĠĠĠĠĠĠ Ġval Ġswipe Flags Ġ= ĠItem Touch Helper . START Ġor ĠItem Touch Helper . END ĊĠĠĠĠĠĠĠ Ġreturn Ġmake Movement Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Flags , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Flags ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move ( ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag To Position Ġ= Ġtarget . adapter Position ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Selected Changed ( view Holder : ĠRecyclerView . ViewHolder ?, Ġaction State : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Selected Changed ( view Holder , Ġaction State ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( action State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . ACTION _ STATE _ DR AG Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder ?. also Ġ{ Ġdrag From Position Ġ= Ġit . adapter Position Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Touch Helper . ACTION _ STATE _ IDLE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drag From Position Ġ!= Ġ- 1 Ġ&& Ġdrag To Position Ġ!= Ġ- 1 Ġ&& Ġdrag From Position Ġ!= Ġdrag To Position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠItem Ġsuccessfully Ġdrag ged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . on Item Move ( drag From Position , Ġdrag To Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReset Ġdrag Ġpositions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag From Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag To Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . on Item Dismiss ( view Holder . adapter Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Child Draw ( ĊĠĠĠĠĠĠĠ Ġc : ĠCanvas , ĊĠĠĠĠĠĠĠ Ġre cyclerView : ĠRecyclerView , ĊĠĠĠĠĠĠĠ ĠviewHolder : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġd X : ĠFloat , ĊĠĠĠĠĠĠĠ Ġd Y : ĠFloat , ĊĠĠĠĠĠĠĠ Ġaction State : ĠInt , ĊĠĠĠĠĠĠĠ Ġis Currently Active : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelete Icon Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ trash can ) !! ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠviewHolder . item View ĊĠĠĠĠĠĠĠ Ġval Ġicon Margin Ġ= Ġ( item View . height Ġ- Ġdelete Icon . intrinsic Height ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġif Ġ( action State Ġ== ĠItem Touch Helper . ACTION _ STATE _ SW I PE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dX Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Icon . setBounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . left Ġ+ Ġicon Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top Ġ+ Ġicon Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . left Ġ+ Ġicon Margin Ġ+ Ġdelete Icon . intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom Ġ- Ġicon Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Icon . setBounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right Ġ- Ġicon Margin Ġ- Ġdelete Icon . intrinsic Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top Ġ+ Ġicon Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right Ġ- Ġicon Margin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom Ġ- Ġicon Margin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . save () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dX Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . clip Rect ( item View . left , ĠitemView . top , Ġd X . toInt (), ĠitemView . bottom ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . clip Rect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right Ġ+ Ġd X . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . top , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . bottom ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Icon . draw ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . restore () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Child Draw ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd X , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd Y , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Currently Active ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠI Item Touch Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Move ( from Position : ĠInt , Ġto Position : ĠInt ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Item Dismiss ( position : ĠInt ) ĊĠĠĠ Ġ} Ċ }