package Ġcom . github . dev it 9 5 1 . fill ing button Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Paint Ċ import Ġandroid . graphics . Rect Ċ import Ġandroid . support . v 7 . widget . AppCompat Button Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġcom . github . dev it 9 5 1 . fill ing button . direction . Fill ing Direction Ċ import Ġcom . github . dev it 9 5 1 . fill ing button . direction . Left To Right Fill ing Direction Ċ Ċ open Ġclass ĠF illing Button Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style : ĠInt Ġ= Ġ 0 ): ĠAppCompat Button ( context , Ġattrs , Ġdef Style ){ ĊĊĊĠĠĠ Ġinternal Ġvar Ġview Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġvar Ġview Height : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġval Ġfilling Rect Ġ= ĠRect () ĊĊĠĠĠ Ġprivate Ġval Ġfilling Color : ĠInt ĊĠĠĠ Ġprivate Ġval Ġfilling Alpha : ĠInt ĊĠĠĠ Ġprivate Ġval Ġfilling Duration : ĠLong ĊĊĠĠĠ Ġprivate Ġval Ġfilling Paint Ġ= ĠPaint ( Paint . ANTI _ ALIAS _ FLAG ) ĊĠĠĠ Ġprivate Ġvar Ġdraw Progress Ġ= Ġfalse ĊĊĠĠĠ Ġopen Ġvar Ġon Button Filled : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġfilling Direction : ĠF illing Direction Ġ= ĠLeft To Right Fill ing Direction () ĊĠĠĠ Ġval Ġfilling Width Value Animator Ġ= ĠValue Animator () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . obtain Styled Attributes ( attrs , ĠR . style able . Fill ing Button , Ġdef Style , Ġ 0 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Color Ġ= Ġget Color ( R . style able . Fill ing Button _ fill Color , ĠColor . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Alpha Ġ= Ġget Int ( R . style able . Fill ing Button _ fill Alpha , Ġ 1 2 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Duration Ġ= Ġget Int ( R . style able . Fill ing Button _ fill Duration , Ġ 1 5 0 0 ). to Long () ĊĠĠĠĠĠĠĠ Ġ}. recycle () ĊĠĠĠĠĠĠĠ Ġfilling Paint . color Ġ= Ġfilling Color ĊĠĠĠĠĠĠĠ Ġfilling Paint . alpha Ġ= Ġfilling Alpha ĊĠĠĠĠĠĠĠ Ġfilling Width Value Animator . duration Ġ= Ġfilling Duration ĊĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Rect . bottom Ġ= Ġview Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Rect . right Ġ= Ġview Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Width Value Animator . setInt Values ( 0 , Ġview Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġif Ġ( draw Progress Ġ&& Ġon Button Filled Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas ?. draw Rect ( fill ing Rect , Ġfilling Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( event ?. action ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Progress Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Fill ing Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Progress Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Fill ing Animation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Fill ing Animation (){ ĊĠĠĠĠĠĠĠ Ġstop Fill ing Animation () ĊĠĠĠĠĠĠĠ Ġfilling Width Value Animator . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Update Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġint Value Ġ= Ġit . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilling Direction . draw Direction ( this @ Fill ing Button , Ġint Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intValue Ġ== Ġfilling Direction . trigger ( this @ Fill ing Button )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Button Filled ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Fill ing Animation (){ ĊĠĠĠĠĠĠĠ Ġfilling Width Value Animator . cancel () ĊĠĠĠĠĠĠĠ Ġfilling Width Value Animator . removeAll Update Listeners () ĊĠĠĠĠĠĠĠ Ġfilling Direction . reset Direction ( this ) ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠ Ġ} Ċ }