package Ġme . li uq ing wen . android . project scalable image view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . ImageView Ċ import Ġorg . jetbrains . ank o . An ko Logger Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠQ ing wen Ġon Ġ 2 0 1 7 - 8 - 2 3 . Ċ Ġ*/ Ċ Ċ enum Ġclass ĠOperation Mode Ċ { ĊĠĠĠ ĠDR AG , ĠZ O OM , ĠNONE Ċ } Ċ Ċ class ĠScal able ImageView : ImageView , ĠAn ko Logger Ċ { ĊĠĠĠ Ġconstructor ( context : ĠContext ): super ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattributes : ĠAttributeSet , Ġdef Style Attr Ġ: ĠInt , Ġdef Style Res : ĠInt ): super ( context , Ġattributes , Ġdef Style Attr , Ġdef Style Res ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattributes : ĠAttributeSet , Ġdef Style Attr : ĠInt ): this ( context , Ġattributes , Ġdef Style Attr , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattributes : ĠAttributeSet ): this ( context , Ġattributes , Ġ 0 ) ĊĠĠĠĠĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN _ ZO OM _ POINTER _ DISTANCE Ġ= Ġ 5 . 0 ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġvar Ġop Mode Ġ= ĠOperation Mode . NONE ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġperform Click (): ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . perform Click () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . perform Click () ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġwhen ( event ?. action Mask ed ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . op Mode Ġ= ĠOperation Mode . DR AG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . touch Down ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ POINTER _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . op Mode Ġ!= ĠOperation Mode . ZO OM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . op Mode Ġ= ĠOperation Mode . ZO OM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . touch Zoom Down ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . op Mode Ġ!= ĠOperation Mode . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . touch Move ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ POINTER _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . op Mode Ġ= ĠOperation Mode . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . resize Image () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . op Mode Ġ= ĠOperation Mode . NONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . replace Image () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġreplace Image () ĊĠĠĠ Ġ{ ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġvar Ġoriginal X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġoriginal Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġoriginal Distance Ġ= Ġ 0 . 0 ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġtouch Down ( event : ĠMotion Event ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . original X Ġ= Ġevent . x ĊĠĠĠĠĠĠĠ Ġthis . original Y Ġ= Ġevent . y ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġtouch Zoom Down ( event : ĠMotion Event ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . original Distance Ġ= Ġthis . get Distance Of Pointers ( event ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġtouch Move ( event : ĠMotion Event ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġevent . x Ġ- Ġthis . original X ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġevent . y Ġ- Ġthis . original Y ĊĠĠĠĠĠĠĠ Ġif Ġ( this . op Mode Ġ== ĠOperation Mode . DR AG ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . left Ġ+= Ġdelta X . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . right Ġ+= Ġdelta X . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . top Ġ+= Ġdelta Y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . bottom Ġ+= Ġdelta Y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . layout ( this . left , Ġthis . top , Ġthis . right , Ġthis . bottom ) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( this . op Mode Ġ== ĠOperation Mode . ZO OM ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġthis . get Distance Of Pointers ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelta Distance Ġ= ĠMath . abs ( distance Ġ- Ġthis . original Distance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delta Distance Ġ> ĠScal able ImageView . MIN _ ZO OM _ POINTER _ DISTANCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . scale Image ( distance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . original Distance Ġ= Ġdistance Ġ//! import ance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// this . original Distance Ġ= Ġdistance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġscale Image ( new Distance : ĠDouble ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġratio Ġ= Ġnew Distance Ġ/ Ġthis . original Distance ĊĠĠĠĠĠĠĠ Ġif Ġ( ratio Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize X Ġ= Ġthis . width Ġ* Ġ( ratio Ġ- Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Y Ġ= Ġthis . height Ġ* Ġ( ratio Ġ- Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġthis . left Ġ- Ġsize X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġthis . right Ġ+ Ġsize X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġthis . top Ġ- Ġsize Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġthis . bottom Ġ+ Ġsize Y ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Frame ( left . toInt (), Ġtop . toInt (), Ġright . toInt (), Ġbottom . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} else Ġif Ġ( ratio Ġ< Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize X Ġ= Ġthis . width Ġ* Ġ( 1 - Ġratio ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Y Ġ= Ġthis . height Ġ* Ġ( 1 Ġ- Ġratio ) Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Ġ= Ġthis . left Ġ+ Ġsize X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Ġ= Ġthis . right Ġ- Ġsize X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Ġ= Ġthis . top Ġ+ Ġsize Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Ġ= Ġthis . bottom Ġ- Ġsize Y ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . set Frame ( left . toInt (), Ġtop . toInt (), Ġright . toInt (), Ġbottom . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġget Distance Of Pointers ( event : ĠMotion Event ): ĠDouble ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelta X Ġ= Ġevent . getX ( 0 ) Ġ- Ġevent . getX ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Y Ġ= Ġevent . getY ( 0 ) Ġ- Ġevent . getY ( 1 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMath . sqrt (( delta X Ġ* Ġdelta X Ġ+ Ġdelta Y Ġ* Ġdelta Y ). toDouble ()) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġprivate Ġfun Ġresize Image () ĊĠĠĠ Ġ{ ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/* override Ġfun Ġon Layout ( changed : ĠBoolean , Ġleft : ĠInt , Ġtop : ĠInt , Ġright : ĠInt , Ġbottom : ĠInt ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Layout ( changed , Ġleft , Ġtop , Ġright , Ġbottom ) ĊĠĠĠ Ġ}*/ ĊĠĠĠĠĊĠĠĠ Ġ/* override Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠ Ġ}*/ ĊĠĠĠĠĊĠĠĠ Ġ/* override Ġfun Ġon Draw ( canvas : ĠCanvas ?) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĠĠĠ Ġ}*/ Ċ }