package Ġcom . chr yn an . imag ery . core Ċ Ċ import Ġcom . chr yn an . imag ery . core . model . F ocal Point Ċ Ċ /** Ċ Ġ* ĠCalculates Ġthe Ġimage Ġmatrix Ġneeded Ġto Ġmaintain Ġthe Ġcorrect Ġcro pping Ġfor Ġimage Ġviews Ġbased Ġon Ċ Ġ* Ġtheir Ġf ocal Ġpoint . Ċ Ġ* Ċ Ġ* ĠThe Ġpurpose Ġof Ġthis Ġclass Ġis Ġto Ġmake Ġsure Ġthat Ġthe Ġf ocal Ġpoint Ġinformation Ġon Ġmedia Ċ Ġ* Ġattachments Ġare Ġh ono ured . ĠThis Ġclass Ġuses Ġthe Ġcustom Ġmatrix Ġoption Ġof Ġandroid ĠImageView 's Ġto Ċ Ġ* Ġcustomize Ġhow Ġthe Ġimage Ġis Ġc ropped Ġinto Ġthe Ġview . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ The Ġexplanation Ġof Ġf ocal Ġpoints ]( https :// github . com / j onom / jquery - focus point # 1 - calculate - your - images - focus - point ) Ċ Ġ* Ġ@ see Ġ[ This Ġwas Ġextracted Ġand Ġadapted Ġfrom Ġthe ĠT us ky ĠApp ĠSource ĠCode ]( https :// github . com / t us ky app / T us ky ) Ċ Ġ*/ Ċ internal Ġclass ĠBase F ocal Point Resolver Ġ: ĠF ocal Point Resolver Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġthe Ġgiven Ġmatrix Ġfor Ġthe Ġgiven Ġparameters . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠHow Ġit Ġworks Ġis Ġusing Ġthe Ġfollowing Ġsteps : ĊĠĠĠĠ Ġ* ĠĠ Ġ- ĠFirst Ġwe Ġdetermine Ġif Ġthe Ġimage Ġis Ġtoo Ġwide Ġor Ġtoo Ġt all Ġfor Ġthe Ġview Ġsize . ĠIf Ġit Ġis ĊĠĠĠĠ Ġ* ĠĠ Ġtoo Ġwide , Ġwe Ġneed Ġto Ġcrop Ġit Ġh orizontally Ġand Ġscale Ġthe Ġheight Ġto Ġfit Ġthe Ġview ĊĠĠĠĠ Ġ* ĠĠ Ġexactly . ĠIf Ġit Ġis Ġtoo Ġt all Ġwe Ġneed Ġto Ġcrop Ġvert ically Ġand Ġscale Ġthe Ġwidth Ġto Ġfit Ġthe ĊĠĠĠĠ Ġ* ĠĠ Ġview Ġexactly . ĊĠĠĠĠ Ġ* ĠĠ Ġ- ĠThen Ġwe Ġdetermine Ġwhat Ġtranslation Ġis Ġneeded Ġto Ġget Ġthe Ġf ocal Ġpoint Ġin Ġview . ĠWe ĊĠĠĠĠ Ġ* ĠĠ Ġprefer Ġto Ġget Ġthe Ġf ocal Ġpoint Ġat Ġthe Ġcenter Ġof Ġthe Ġpreview . ĠHowever Ġif Ġthat Ġwould ĊĠĠĠĠ Ġ* ĠĠ Ġresult Ġin Ġsome Ġpart Ġof Ġthe Ġpreview Ġbeing Ġempty , Ġwe Ġinstead Ġalign Ġthe Ġimage Ġso Ġthat Ġit ĊĠĠĠĠ Ġ* ĠĠ Ġfill s Ġthe Ġview , Ġbut Ġstill Ġthe Ġf ocal Ġpoint Ġis Ġalways Ġin Ġview . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġview Width ĠThe Ġwidth Ġof Ġthe ĠimageView . ĊĠĠĠĠ Ġ* Ġ@ param Ġview Height ĠThe Ġheight Ġof Ġthe ĠimageView ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Width ĠThe Ġwidth Ġof Ġthe Ġactual Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Height ĠThe Ġheight Ġof Ġthe Ġactual Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġf ocal Point ĠThe Ġf ocal Ġpoint Ġto Ġfocus ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ F ocal Point Resolver . Result ] Ġinstance Ġused Ġto Ġcalculate Ġthe Ġmatrix Ġrepresenting ĊĠĠĠĠ Ġ* Ġthe Ġportion Ġof Ġthe Ġimage Ġto Ġbe Ġdisplayed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġresolve ( ĊĠĠĠĠĠĠĠ Ġview Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġview Height : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Height : ĠFloat , ĊĠĠĠĠĠĠĠ Ġf ocal Point : ĠF ocal Point ĊĠĠĠ Ġ): ĠF ocal Point Resolver . Result Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġcalculate Scaling ( view Width , Ġview Height , Ġimage Width , Ġimage Height ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġtop Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġvar Ġleft Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġif Ġ( is Vertical Crop ( view Width , Ġview Height , Ġimage Width , Ġimage Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġf ocal Offset ( view Height , Ġimage Height , Ġscale , Ġf ocal Point . view Y ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// Ġhorizontal Ġcrop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġf ocal Offset ( view Width , Ġimage Width , Ġscale , Ġf ocal Point . view X ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠF ocal Point Resolver . Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Ġ= Ġscale , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdx Ġ= Ġleft , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdy Ġ= Ġtop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Width Ġ= Ġimage Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Height Ġ= Ġimage Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Width Ġ= Ġview Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Height Ġ= Ġview Height , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ocal Point Ġ= Ġf ocal Point ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculate Ġthe Ġscaling Ġof Ġthe Ġimage Ġneeded Ġto Ġmake Ġit Ġfill Ġthe Ġscreen . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġscaling Ġused Ġdepends Ġon Ġif Ġwe Ġneed Ġa Ġvertical Ġof Ġhorizontal Ġcrop . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcalculate Scaling ( ĊĠĠĠĠĠĠĠ Ġview Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġview Height : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Height : ĠFloat ĊĠĠĠ Ġ): ĠFloat Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is Vertical Crop ( view Width , Ġview Height , Ġimage Width , Ġimage Height )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Width Ġ/ Ġimage Width ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĠĠĠĠ Ġ// Ġhorizontal Ġcrop : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Height Ġ/ Ġimage Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġtrue Ġif Ġwe Ġneed Ġa Ġvertical Ġcrop , Ġfalse Ġfor Ġa Ġhorizontal Ġcrop . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Vertical Crop ( ĊĠĠĠĠĠĠĠ Ġview Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġview Height : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Width : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage Height : ĠFloat ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ratio Ġ= Ġview Width Ġ/ Ġview Height ĊĠĠĠĠĠĠĠ Ġval Ġimage Ratio Ġ= Ġimage Width Ġ/ Ġimage Height ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview Ratio Ġ> Ġimage Ratio ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculate Ġthe Ġrelative Ġoffset Ġneeded Ġto Ġfocus Ġon Ġthe Ġf ocal Ġpoint Ġin Ġone Ġdirection . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġworks Ġfor Ġboth Ġthe Ġvertical Ġand Ġhorizontal Ġcro ps . ĠIt Ġsimply Ġcalculates ĊĠĠĠĠ Ġ* Ġwhat Ġoffset Ġto Ġtake Ġbased Ġon Ġthe Ġpro port ions Ġbetween Ġthe Ġscaled Ġimage Ġand Ġthe Ġview ĊĠĠĠĠ Ġ* Ġavailable . ĠIt Ġalso Ġmakes Ġsure Ġto Ġalways Ġfill Ġthe Ġbounds Ġof Ġthe Ġview Ġcompletely Ġwith ĊĠĠĠĠ Ġ* Ġthe Ġimage . ĠSo Ġit Ġwon 't Ġput Ġthe Ġvery Ġedge Ġof Ġthe Ġimage Ġin Ġcenter , Ġbecause Ġthat Ġwould ĊĠĠĠĠ Ġ* Ġleave Ġpart Ġof Ġthe Ġview Ġempty . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġf ocal Offset ( ĊĠĠĠĠĠĠĠ Ġview : ĠFloat , ĊĠĠĠĠĠĠĠ Ġimage : ĠFloat , ĊĠĠĠĠĠĠĠ Ġscale : ĠFloat , ĊĠĠĠĠĠĠĠ Ġf ocal : ĠFloat ĊĠĠĠ Ġ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġfraction Ġof Ġthe Ġimage Ġthat Ġwill Ġbe Ġin Ġview : ĊĠĠĠĠĠĠĠ Ġval Ġin View Ġ= Ġview Ġ/ Ġ( scale Ġ* Ġimage ) ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= Ġ 0 f ĊĊĠĠĠĠĠĠĠ Ġ// ĠThese Ġvalues Ġindicate Ġthe Ġmaximum Ġand Ġminimum Ġf ocal Ġparameter Ġpossible Ġwhile Ġstill ĊĠĠĠĠĠĠĠ Ġ// Ġkeeping Ġthe Ġentire Ġview Ġfilled Ġwith Ġthe Ġimage : ĊĠĠĠĠĠĠĠ Ġval Ġmax F ocal Ġ= Ġ 1 Ġ- Ġin View Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġmin F ocal Ġ= Ġin View Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( focal Ġ> Ġmax F ocal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ- (( 2 Ġ- Ġin View ) Ġ/ Ġ 2 ) Ġ* Ġimage Ġ* Ġscale Ġ+ Ġview Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( focal Ġ> Ġmin F ocal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ- focal Ġ* Ġimage Ġ* Ġscale Ġ+ Ġview Ġ* Ġ 0 . 5 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġoffset ĊĠĠĠ Ġ} Ċ } Ċ