package Ġcom . k linker . android . twitter _ l . activities . media _ viewer . image Ċ Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Toolbar Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġcom . k linker . android . twitter _ l . R Ċ Ċ class ĠDrag Controller ( private Ġval Ġactivity : ĠAppCompatActivity , Ġprivate Ġval Ġdraggable View : ĠView ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtoolbar : ĠToolbar Ġby Ġlazy Ġ{ Ġactivity . findViewById < View >( R . id . toolbar ) Ġas ĠToolbar Ġ} ĊĠĠĠ Ġprivate Ġval Ġcount Layout : ĠView ? Ġby Ġlazy Ġ{ Ġactivity . findViewById < View >( R . id . show _ info ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġbackground : ĠView Ġby Ġlazy Ġ{ Ġactivity . findViewById < View >( R . id . background ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġscreen Center X : ĠDouble ĊĠĠĠ Ġprivate Ġval Ġscreen Center Y : ĠDouble ĊĠĠĠ Ġprivate Ġval Ġmax Hy po : ĠDouble ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent X : ĠFloat Ġ= Ġ 0 . toFloat () ĊĠĠĠ Ġprivate Ġvar Ġcurrent Y : Float Ġ= Ġ 0 . toFloat () ĊĊĠĠĠ Ġinternal Ġvar Ġis Dragging Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġactivity . resources . display Metrics ĊĠĠĠĠĠĠĠ Ġscreen Center X Ġ= Ġ( display . width Pixels Ġ/ Ġ 2 ). toDouble () ĊĠĠĠĠĠĠĠ Ġscreen Center Y Ġ= Ġ( display . height Pixels Ġ/ Ġ 2 ). toDouble () ĊĠĠĠĠĠĠĠ Ġmax Hy po Ġ= ĠMath . h ypot ( screen Center X , Ġscreen Center Y ) ĊĊĠĠĠĠĠĠĠ Ġbackground . background . alpha Ġ= Ġ 2 5 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtrack Touch ( event : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent X Ġ= Ġdraggable View . x Ġ- Ġevent . raw X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Y Ġ= Ġdraggable View . y Ġ- Ġevent . raw Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Touch ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġcenter Y Pos Ġ= Ġdraggable View . y Ġ+ Ġdraggable View . height Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġcenter X Pos Ġ= Ġdraggable View . x Ġ+ Ġdraggable View . width Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġhy po Ġ= ĠMath . h ypot ( screen Center X Ġ- Ġcenter X Pos , Ġscreen Center Y Ġ- Ġcenter Y Pos ) ĊĊĠĠĠĠĠĠĠ Ġadjust Alpha ( hy po ) ĊĠĠĠĠĠĠĠ Ġadjust Scale ( hy po ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġtrack Touch ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġdraggable View . animate (). x ( event . raw X Ġ+ Ġcurrent X ). y ( event . raw Y Ġ+ Ġcurrent Y ). set Duration ( 0 ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background . background . alpha Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . support Finish After Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Image () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust Alpha ( hy po : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġ(( hy po Ġ* Ġ 2 5 5 ). toInt () Ġ/ Ġmax Hy po . toInt ()) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġscaled Alpha Ġ= Ġbackground . background . alpha . toFloat () Ġ/ Ġ 2 5 5 f ĊĊĠĠĠĠĠĠĠ Ġif Ġ( alpha Ġ< Ġ 2 5 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground . background . alpha Ġ= Ġ 2 5 5 Ġ- Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar . alpha Ġ= Ġif Ġ( scaled Alpha Ġ< Ġ. 4 5 f ) Ġ 0 f Ġelse Ġscaled Alpha ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Layout ?. visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Layout ?. alpha Ġ= Ġif Ġ( scaled Alpha Ġ< Ġ. 4 5 f ) Ġ 0 f Ġelse Ġscaled Alpha ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadjust Scale ( hy po : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġif Ġ( 1 Ġ- Ġ( hy po Ġ/ Ġmax Hy po ). toFloat () Ġ< Ġ. 7 ) Ġ. 7 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 1 Ġ- Ġ( hy po Ġ/ Ġmax Hy po ). toFloat () ĊĊĠĠĠĠĠĠĠ Ġdraggable View . scale X Ġ= Ġscale ĊĠĠĠĠĠĠĠ Ġdraggable View . scale Y Ġ= Ġscale ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġdraggable View . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. x ( 0 f ). y ( screen Center Y . toFloat () Ġ- Ġdraggable View . height Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale X ( 1 f ). scale Y ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĊĠĠĠĠĠĠĠ Ġbackground . background . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġtoolbar . animate (). alpha ( 1 . 0 f ). set Duration ( 1 5 0 ). start () ĊĠĠĠ Ġ} Ċ }