package Ġcom . air bnb . lott ie . samples Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroidx . custom view . widget . View Drag Helper Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Gravity Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ Ċ class ĠTrim View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġleft Anchor Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠ Ġiv . setImage Resource ( R . drawable . ic _ trim ) ĊĠĠĠĠĠĠĠ Ġiv ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġright Anchor Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġiv Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠ Ġiv . setImage Resource ( R . drawable . ic _ trim ) ĊĠĠĠĠĠĠĠ Ġiv ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcallback : Ġ( Float , ĠFloat ) Ġ-> ĠUnit ĊĊĠĠĠ Ġprivate Ġval Ġdrag Helper Ġ= ĠView Drag Helper . create ( this , Ġobject : ĠView Drag Helper . Callback () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtry Capture View ( child : ĠView , Ġpointer Id : ĠInt ) Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View Horizontal Drag Range ( child : ĠView ) Ġ= Ġwidth ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclamp View Position Horizontal ( child : ĠView , Ġleft : ĠInt , Ġdx : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( child Ġ== Ġleft Anchor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Of ( min Of ( left , Ġright Anchor . left Ġ- Ġleft Anchor . width ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Of ( max Of ( left Anchor . right , Ġleft ), Ġwidth Ġ- Ġright Anchor . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Position Changed ( view : ĠView , Ġleft : ĠInt , Ġtop : ĠInt , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Progress Ġ= Ġleft Anchor . left Ġ/ Ġwidth . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Progress Ġ= Ġright Anchor . right Ġ/ Ġwidth . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( start Progress , Ġend Progress ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġleft Lp Ġ= ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġleft Lp . gravity Ġ= ĠGr avity . START ĊĠĠĠĠĠĠĠ Ġleft Anchor . layout Params Ġ= Ġleft Lp ĊĠĠĠĠĠĠĠ Ġadd View ( left Anchor ) ĊĠĠĠĠĠĠĠ Ġval Ġright Lp Ġ= ĠLayout Params ( LayoutParams . WRAP _ CONTENT , ĠLayout Params . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠ Ġright Lp . gravity Ġ= ĠGr avity . END ĊĠĠĠĠĠĠĠ Ġright Anchor . layout Params Ġ= Ġright Lp ĊĠĠĠĠĠĠĠ Ġadd View ( right Anchor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( drag Helper . should Intercept Touch Event ( ev )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Intercept Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġdrag Helper . process Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Callback ( callback : Ġ( Float , ĠFloat ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . callback Ġ= Ġcallback ĊĠĠĠ Ġ} Ċ }