package Ġcom . think up . steps indicator . ext Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . LinearLayout Ċ Ċ const Ġval ĠAN IM _ DEFAULT _ VALUE Ġ= Ġ 3 0 0 L Ċ const Ġval ĠSTEP _ FACTOR Ġ= Ġ 1 0 0 Ċ const Ġval ĠMIN _ STEP _ FACTOR Ġ= Ġ 1 Ċ Ċ fun ĠView . animate Progress ( ĊĠĠĠ Ġsum : ĠInt , ĊĠĠĠ Ġmin : ĠInt Ġ= ĠMIN _ STEP _ FACTOR , ĊĠĠĠ Ġduration : ĠLong Ġ= ĠAN IM _ DEFAULT _ VALUE , ĊĠĠĠ Ġreverse : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġlistener : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġanim Ġ= Ġif Ġ(! reverse ) ĠValue Animator . of Int ( min , Ġsum ) Ġelse ĠValue Animator . of Int ( sum , Ġmin ) ĊĠĠĠ Ġanim . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġanim . add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params : ĠLinearLayout . LayoutParams Ġ= Ġlayout Params Ġas ĠLinearLayout . LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . weight Ġ= Ġvalue . toFloat () ĊĠĠĠĠĠĠĠ Ġset LayoutParams ( layout Params ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġanim . duration Ġ= Ġduration ĊĠĠĠ Ġanim . start () Ċ } Ċ Ċ fun ĠView . set Margins ( ĊĠĠĠ Ġleft : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġtop : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġright : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġbottom : ĠInt ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġval Ġlp Ġ= Ġlayout Params Ġas ? ĠViewGroup . Margin LayoutParams Ġ?: Ġreturn ĊĠĠĠ Ġlp . set Margins ( ĊĠĠĠĠĠĠĠ Ġleft Ġ?: Ġlp . left Margin , ĊĠĠĠĠĠĠĠ Ġtop Ġ?: Ġlp . top Margin , ĊĠĠĠĠĠĠĠ Ġright Ġ?: Ġlp . right Margin , ĊĠĠĠĠĠĠĠ Ġbottom Ġ?: Ġlp . right Margin ĊĠĠĠ Ġ) ĊĠĠĠ Ġlayout Params Ġ= Ġlp Ċ } Ċ Ċ fun ĠViewGroup . LayoutParams . to Linear () Ġ= Ġthis Ġas ĠLinearLayout . LayoutParams