/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠAll an ĠWang Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġca . all an wang . ka u . medi ap icker Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġca . all an wang . ka u . ui . views . Measure Spec Contract Ċ import Ġca . all an wang . ka u . ui . views . Measure Spec Delegate Ċ import Ġca . all an wang . ka u . utils . inflate Ċ import Ġca . all an wang . ka u . utils . scale XY Ċ import Ġca . all an wang . ka u . utils . set BackgroundColor Res Ċ import Ġca . all an wang . ka u . utils . setIcon Ċ import Ġca . all an wang . ka u . utils . visible Ċ import Ġcom . mike pen z . google _ material _ type face _ library . Google Material Ċ import Ġjp . was ab eef . blur ry . internal . Blur Factor Ċ import Ġjp . was ab eef . blur ry . internal . Blur Task Ċ import Ġkotlinx . android . synt hetic . main . ka u _ bl urred _ image view . view .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAll an ĠWang Ġon Ġ 2 0 1 7 - 0 7 - 1 4 . Ċ Ġ* Ċ Ġ* ĠImageView Ġthat Ġcan Ġbe Ġbl urred Ġand Ġselected Ċ Ġ* ĠThe Ġframe Ġis Ġcomposed Ġof Ġthree Ġlayers : Ġthe Ġbase , Ġthe Ġblur , Ġand Ġthe Ġforeground Ċ Ġ* ĠImages Ġshould Ġbe Ġplaced Ġin Ġthe Ġbase Ġview , Ġand Ġthe Ġblur Ġview Ġshould Ġnot Ġbe Ġtouched Ċ Ġ* Ġas Ġthe Ġclass Ġwill Ġhandle Ġit Ċ Ġ* ĠThe Ġforeground Ġby Ġdefault Ġcontains Ġa Ġwhite Ġcheck mark , Ġbut Ġcan Ġbe Ġcustomized Ġor Ġhidden Ġdepending Ġon Ġthe Ġsituation Ċ Ġ*/ Ċ class ĠBl urred ImageView Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĠMeasure Spec Contract Ġby ĠMeasure Spec Delegate () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbl urred Ġ= Ġfalse ĊĠĠĠ Ġval Ġimage Base : ĠImageView Ġget () Ġ= Ġimage _ base ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( R . layout . ka u _ bl urred _ image view , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġinit Attrs ( context , Ġattrs ) ĊĠĠĠĠĠĠĠ Ġimage _ foreground . setIcon ( Google Material . Icon . gmd _ check , Ġ 3 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġon Measure ( this , Ġwidth Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( result . first , Ġresult . second ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Animation () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . clear Animation () ĊĠĠĠĠĠĠĠ Ġimage Base . clear Animation () ĊĠĠĠĠĠĠĠ Ġimage _ blur . clear Animation () ĊĠĠĠĠĠĠĠ Ġimage _ foreground . clear Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠView . scale Animate ( scale : ĠFloat ) Ġ= Ġanimate (). scale XY ( scale ). set Duration ( ANIM ATION _ DURATION ) ĊĠĠĠ Ġprivate Ġfun ĠView . alpha Animate ( alpha : ĠFloat ) Ġ= Ġanimate (). alpha ( alpha ). set Duration ( ANIM ATION _ DURATION ) ĊĊĠĠĠ Ġfun Ġis Bl urred (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbl urred ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠApplies Ġa Ġblur Ġand Ġfill s Ġthe Ġblur Ġimage Ġasynchronously ĊĠĠĠĠ Ġ* ĠWhen Ġready , Ġscales Ġthe Ġimage Ġdown Ġand Ġshows Ġthe Ġblur Ġ& Ġforeground ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġblur () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bl urred ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbl urred Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= ĠBl ur Factor () ĊĠĠĠĠĠĠĠ Ġfactor . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġfactor . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ ĠBl ur Task ( image Base , Ġfactor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ blur . setImage Drawable ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Animate ( ANIM ATION _ SCALE ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ blur . alpha Animate ( 1 f ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ foreground . alpha Animate ( 1 f ). start () ĊĠĠĠĠĠĠĠ Ġ}. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġanimations Ġand Ġbl urs Ġthe Ġimage Ġwithout Ġfurther Ġanimations ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġrelatively Ġinstant aneous , Ġas Ġretrieving Ġthe Ġbl urred Ġimage ĊĠĠĠĠ Ġ* Ġis Ġstill Ġasynchronous Ġand Ġtakes Ġtime ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġblur Instant ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġbl urred Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġclear Animation () ĊĠĠĠĠĠĠĠ Ġval Ġfactor Ġ= ĠBl ur Factor () ĊĠĠĠĠĠĠĠ Ġfactor . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġfactor . height Ġ= Ġheight ĊĠĠĠĠĠĠĠ ĠBl ur Task ( image Base , Ġfactor ) Ġ{ Ġdrawable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ blur . setImage Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale XY Ġ= ĠAN IM ATION _ SCALE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ blur . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage _ foreground . alpha Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġ}. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn imate Ġview Ġback Ġto Ġoriginal Ġstate Ġand Ġremove Ġdrawable Ġwhen Ġfinished ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Blur () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! bl urred ) Ġreturn ĊĠĠĠĠĠĠĠ Ġbl urred Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġscale Animate ( 1 . 0 f ). start () ĊĠĠĠĠĠĠĠ Ġimage _ blur . alpha Animate ( 0 f ). with End Action Ġ{ Ġimage _ blur . setImage Drawable ( null ) Ġ}. start () ĊĠĠĠĠĠĠĠ Ġimage _ foreground . alpha Animate ( 0 f ). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear Ġall Ġanimations Ġand Ġun blur Ġthe Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġremove Blur Instant ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġbl urred Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġclear Animation () ĊĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġscale X Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġimage _ blur . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġimage _ blur . setImage Drawable ( null ) ĊĠĠĠĠĠĠĠ Ġimage _ foreground . alpha Ġ= Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSwitch Ġblur Ġstate Ġand Ġapply Ġtransition ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġnew Ġstate Ġis Ġbl urred ; Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtoggle Blur (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bl urred ) Ġremove Blur () ĊĠĠĠĠĠĠĠ Ġelse Ġblur () ĊĠĠĠĠĠĠĠ Ġreturn Ġbl urred ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġall Ġof Ġthe Ġblur Ġeffects Ġto Ġrestore Ġthe Ġoriginal Ġstates ĊĠĠĠĠ Ġ* ĠIf Ġviews Ġwere Ġmodified Ġin Ġother Ġways , Ġthis Ġmethod Ġwon 't Ġaffect Ġit ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Blur Instant ly () ĊĠĠĠĠĠĠĠ Ġimage Base . setImage Drawable ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReset Ġmost Ġof Ġpossible Ġchanges Ġto Ġthe Ġview ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfull Reset () Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġfull Action ({ Ġit . visible (). background Ġ= Ġnull Ġ}) ĊĠĠĠĠĠĠĠ Ġimage _ foreground . set BackgroundColor Res ( R . color . ka u _ bl urred _ image _ selection _ overlay ) ĊĠĠĠĠĠĠĠ Ġimage _ foreground . setIcon ( Google Material . Icon . gmd _ check , Ġ 3 0 , ĠColor . WHITE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfull Action ( action : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġaction ( this ) ĊĠĠĠĠĠĠĠ Ġaction ( image Base ) ĊĠĠĠĠĠĠĠ Ġaction ( image _ blur ) ĊĠĠĠĠĠĠĠ Ġaction ( image _ foreground ) ĊĠĠĠ Ġ} Ċ } Ċ