package Ġcom . hu ich ong zi . vr ar demo Ċ Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . core . view . margin Start Ċ import Ġandroidx . core . view . margin Top Ċ import Ġcom . hu ich ong zi . vr ar demo . databinding . Activity Zoom Video Binding Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min Ċ Ċ class ĠZoom Video : ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Zoom Video Binding ĊĊĠĠĠ Ġprivate Ġval Ġgesture Detector Ġ= ĠGest ure Detector ( object Ġ: ĠGest ure Detector . On Gesture Listener { ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Show Press ( e : ĠMotion Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap Up ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Press ( e : ĠMotion Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fl ing ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 : ĠMotion Event , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe 2 : ĠMotion Event , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity X : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( e 2 . x Ġ- Ġe 1 . x Ġ> Ġ 1 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . video View . seek To ( min ( binding . video View . duration , Ġbinding . video View . current Position Ġ+ Ġ(( e 2 . x Ġ- Ġe 1 . x ) Ġ* Ġ 1 0 0 ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" vr video Ġseek ", Ġbinding . video View . current Position . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif ( e 2 . x Ġ- Ġe 1 . x Ġ< Ġ- 1 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . video View . seek To ( max ( 0 , Ġbinding . video View . current Position Ġ+ Ġ(( e 2 . x Ġ- Ġe 1 . x ) Ġ* Ġ 1 0 0 ). toInt ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" vr video Ġseek ", Ġbinding . video View . current Position . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwindow . set Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN , ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Zoom Video Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġbinding . minus Width . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize Video Width ( min ( binding . root . width Ġ/ Ġ 4 , Ġbinding . video View . margin Start Ġ+ Ġ 3 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . plus Width . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize Video Width ( max ( 0 , Ġbinding . video View . margin Start Ġ- Ġ 3 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . minus Height . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize Video Height ( min ( binding . root . height Ġ/ Ġ 4 , Ġbinding . video View . margin Top Ġ+ Ġ 2 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . plus Height . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresize Video Height ( max ( 0 , Ġbinding . video View . margin Top Ġ- Ġ 2 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġintent . get Parcelable Extra < Uri >(" uri ") ĊĠĠĠĠĠĠĠ Ġbinding . video View . set Video URI ( uri ) ĊĠĠĠĠĠĠĠ Ġbinding . video View . setOn Prepared Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . video View . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . video View . setOn Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgesture Detector . on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Touch Listener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresize Video Width ( margin Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġbinding . video View . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . margin End Ġ= Ġmargin ĊĠĠĠĠĠĠĠ Ġlayout Params . margin Start Ġ= Ġmargin ĊĠĠĠĠĠĠĠ Ġbinding . video View . layout Params Ġ= Ġlayout Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresize Video Height ( margin Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġbinding . video View . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . top Margin Ġ= Ġmargin ĊĠĠĠĠĠĠĠ Ġlayout Params . bottom Margin Ġ= Ġmargin ĊĠĠĠĠĠĠĠ Ġbinding . video View . layout Params Ġ= Ġlayout Params ĊĠĠĠ Ġ} Ċ }