package Ġjp . studio . ed am ame . bal lo ont utorial Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Frame Layout ĊĊ Ċ internal Ġabstract Ġclass ĠTutorial Base View Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġtarget : ĠView ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġvalue Ġanimation ĊĠĠĠĠ Ġ* Ġchange Ġhole Ġradius Ġby Ġanimation Ġupdated ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġvar Ġradius : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġmax Radius : ĠFloat Ġ= Ġ 0 f ĊĊĠĠĠ Ġprotected Ġval Ġhole Paint Ġ= ĠPaint (). apply Ġ{ Ġis Anti Alias Ġ= Ġtrue Ġ} ĊĠĠĠ Ġprivate Ġval Ġbase Paint Ġ= ĠPaint (). apply Ġ{ Ġis Anti Alias Ġ= Ġtrue Ġ} ĊĊĠĠĠ Ġvar Ġtarget Center X Ġ= Ġ 0 f ĊĠĠĠ Ġvar Ġtarget Center Y Ġ= Ġ 0 f ĊĊĠĠĠ Ġval Ġtarget Rect : ĠRect F Ġ= ĠRect F () ĊĊĠĠĠ Ġprotected Ġvar Ġdensity Ġ= Ġ 0 f ĊĊĠĠĠ Ġvar Ġbase Color Ġ= ĠColor . parse Color ("# 9 9 0 0 0 0 0 0 ") ĊĊĠĠĠ Ġprivate Ġvar Ġlatest Motion Event : ĠMotion Event ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠonClick Target : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠonClick Out Side : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġrequire Ġcall ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinitialize ( context : ĠContext , Ġtarget : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbring To Front () ĊĠĠĠĠĠĠĠ Ġset Layer Type ( View . LAYER _ TYPE _ SOFTWARE , Ġnull ) ĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĊĠĠĠĠĠĠĠ Ġthis . target Ġ= Ġtarget ĊĊĠĠĠĠĠĠĠ Ġthis . hole Paint . xfer mode Ġ= ĠPort er D uff X fer mode ( Port er D uff . Mode . CLEAR ) ĊĊĠĠĠĠĠĠĠ Ġthis . density Ġ= Ġcontext . resources . display Metrics . density ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Target ( onclick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . onClick Target Ġ= Ġonclick ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Out Side ( onclick : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . onClick Out Side Ġ= Ġonclick ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġbase Paint . color Ġ= Ġthis . base Color ĊĠĠĠĠĠĠĠ Ġcanvas ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw Rect ( 0 F , Ġ 0 F , Ġit . width . toFloat (), Ġit . height . toFloat (), Ġbase Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Dig ging ( duration : ĠLong , Ġon Animation End : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠValue Animator . of Float ( 0 f , Ġmax Radius ) ĊĠĠĠĠĠĠĠ Ġanim . duration Ġ= Ġduration ĊĊĠĠĠĠĠĠĠ Ġanim . add Update Listener Ġ{ Ġanim ator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . radius Ġ= Ġanim ator . animated Value Ġas ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanim . addListener ( object Ġ: ĠAn imator . Animator Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Repeat ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Cancel ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Animation End . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġanim . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĥĥ ãĥģ ãģķãĤĮãģŁ åº§ æ¨Ļ ãĤĴåıĸå¾Ĺ ĊĠĠĠĠĠĠĠ Ġlatest Motion Event Ġ= Ġevent ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsetup OnClickListener ( target Rect : ĠRect F ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠonClick Target Ġ= Ġthis . onClick Target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmotion Event Ġ= Ġlatest Motion Event ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( onClick Target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( motion Event Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtarget Rect . left Ġ< Ġmotion Event . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmotion Event . x Ġ< Ġtarget Rect . right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtarget Rect . top Ġ< Ġmotion Event . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmotion Event . y Ġ< Ġtarget Rect . bottom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Target . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Out Side ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Out Side ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }