package Ġcom . engine er . imit ate . ui . widget . view . layout manager Ċ Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroidx . recyclerview . widget . Item Touch Helper Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġ éĴ ī æŁĲ äºº Ċ Ġ* Ġgithub : Ġhttps :// github . com / D ing M ou Ren Ċ Ġ* Ġemail : Ġn ail ding mo uren @ gmail . com Ċ Ġ*/ ĊĊ Ċ class ĠItem Touch Helper Callback < T > Ġ: ĠItem Touch Helper . Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadapter : Ġandroidx . recyclerview . widget . RecyclerView . Adapter < *> ĊĠĠĠ Ġprivate Ġvar Ġdata List : ĠMutable List < T >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Listener : ĠOn Slide Listener < T >? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( adapter : Ġandroidx . recyclerview . widget . RecyclerView . Adapter <* >, Ġdata List : ĠMutable List < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġthis . data List Ġ= Ġdata List ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( adapter : Ġandroidx . recyclerview . widget . RecyclerView . Adapter <* >, Ġdata List : ĠMutable List < T >, Ġlistener : ĠOn Slide Listener < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġthis . data List Ġ= Ġdata List ĊĠĠĠĠĠĠĠ Ġthis . m Listener Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġcheck IsNull ( t : ĠT ?): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNullPointerException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset On Slide Listener ( m Listener : ĠOn Slide Listener < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m Listener Ġ= Ġm Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Movement Flags ( re cyclerView : Ġandroidx . recyclerview . widget . RecyclerView , ĠviewHolder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrag Flags Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġslide Flags Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= Ġre cyclerView . layout Manager ĊĠĠĠĠĠĠĠ Ġif Ġ( layout Manager Ġis ĠSlide LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslide Flags Ġ= ĠItem Touch Helper . LEFT Ġor ĠItem Touch Helper . RIGHT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠItem Touch Helper . Callback . make Movement Flags ( drag Flags , Ġslide Flags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move ( re cyclerView : Ġandroidx . recyclerview . widget . RecyclerView , ĠviewHolder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġtarget : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sw ip ed ( view Holder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder . item View . setOn Touch Listener ( null ) ĊĠĠĠĠĠĠĠ Ġval Ġlayout Position Ġ= ĠviewHolder . layout Position ĊĠĠĠĠĠĠĠ Ġval Ġremove Ġ= Ġdata List !!. remove At ( layout Position ) ĊĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener !!. on S li ded ( view Holder , Ġremove , Ġif Ġ( direction Ġ== ĠItem Touch Helper . LEFT ) ĠItem Config . SL ID ED _ LEFT Ġelse ĠItem Config . SL ID ED _ RIGHT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter . item Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener !!. on Clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Item View Swipe Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Child Draw ( c : ĠCanvas , Ġre cyclerView : Ġandroidx . recyclerview . widget . RecyclerView , ĠviewHolder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd X : ĠFloat , Ġd Y : ĠFloat , Ġaction State : ĠInt , Ġis Currently Active : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Child Draw ( c , Ġre cyclerView , ĠviewHolder , Ġd X , Ġd Y , Ġaction State , Ġis Currently Active ) ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠviewHolder . item View ĊĠĠĠĠĠĠĠ Ġif Ġ( action State Ġ== ĠItem Touch Helper . ACTION _ STATE _ SW I PE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġratio Ġ= Ġd X Ġ/ Ġget Threshold ( re cyclerView , ĠviewHolder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ratio Ġ< Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġratio Ġ= Ġ- 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . rotation Ġ= Ġratio Ġ* ĠItem Config . DEFAULT _ ROT ATE _ DEG REE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Count Ġ= Ġre cyclerView . child Count ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Count Ġ> ĠItem Config . DEFAULT _ SHOW _ ITEM ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 1 Ġuntil Ġchild Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġchild Count Ġ- Ġposition Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġre cyclerView . getChild At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . scale X Ġ= Ġ 1 Ġ- Ġindex Ġ* ĠItem Config . DEFAULT _ SCALE Ġ+ ĠMath . abs ( ratio ) Ġ* ĠItem Config . DEFAULT _ SCALE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . scale Y Ġ= Ġ 1 Ġ- Ġindex Ġ* ĠItem Config . DEFAULT _ SCALE Ġ+ ĠMath . abs ( ratio ) Ġ* ĠItem Config . DEFAULT _ SCALE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . translation Y Ġ= Ġ( index Ġ- ĠMath . abs ( ratio )) Ġ* ĠitemView . meas ured Height Ġ/ ĠItem Config . DEFAULT _ TRANSL ATE _ Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( position Ġin Ġ 0 Ġuntil Ġchild Count Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġchild Count Ġ- Ġposition Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġre cyclerView . getChild At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . scale X Ġ= Ġ 1 Ġ- Ġindex Ġ* ĠItem Config . DEFAULT _ SCALE Ġ+ ĠMath . abs ( ratio ) Ġ* ĠItem Config . DEFAULT _ SCALE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . scale Y Ġ= Ġ 1 Ġ- Ġindex Ġ* ĠItem Config . DEFAULT _ SCALE Ġ+ ĠMath . abs ( ratio ) Ġ* ĠItem Config . DEFAULT _ SCALE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . translation Y Ġ= Ġ( index Ġ- ĠMath . abs ( ratio )) Ġ* ĠitemView . meas ured Height Ġ/ ĠItem Config . DEFAULT _ TRANSL ATE _ Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ!= Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener !!. on Sl iding ( view Holder , Ġratio , Ġif Ġ( ratio Ġ< Ġ 0 ) ĠItem Config . SL ID ING _ LEFT Ġelse ĠItem Config . SL ID ING _ RIGHT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Listener !!. on Sl iding ( view Holder , Ġratio , ĠItem Config . SL ID ING _ NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear View ( re cyclerView : Ġandroidx . recyclerview . widget . RecyclerView , ĠviewHolder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . clear View ( re cyclerView , ĠviewHolder ) ĊĠĠĠĠĠĠĠ ĠviewHolder . item View . rotation Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Threshold ( re cyclerView : Ġandroidx . recyclerview . widget . RecyclerView , ĠviewHolder : Ġandroidx . recyclerview . widget . RecyclerView . ViewHolder ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġre cyclerView . width Ġ* Ġget Swipe Threshold ( view Holder ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ