/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 2 0 ĠFish ball zz z Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . la ot ou a . d awn is land k . screens . widgets Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . Frame Layout Ċ import Ġtim ber . log . Tim ber Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġ ĠInter cept Ġfl ing Ġsw ip es Ġgesture Ġbefore Ġother Ġlistener Ġhandles Ġit Ċ Ġ* Ġ Ġi . e . ĠV P 2 Ġconsume s Ġevents Ġwhich Ġhas Ġthe Ġsame Ġscroll Ġdirection Ġhttps :// issue tracker . google . com / issues / 1 5 4 7 5 1 4 0 1 Ċ Ġ*/ Ċ class ĠF ling Interceptor Ġ: ĠFrame Layout Ġ{ ĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĊĠĠĠ Ġprivate Ġvar Ġswipe Last X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġswipe Start X : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġswipe Cancel Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġx Distance : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġy Distance : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġx Last : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġy Last : ĠFloat Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġval Ġtouch S lop : ĠInt Ġ= Ġandroid . view . View Configuration . get ( context ). scaled Touch S lop ĊĠĠĠ Ġprivate Ġval Ġswipe S lop : ĠInt Ġ= Ġ 4 8 ĊĠĠĠ Ġprivate Ġvar Ġis Touch ing Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġbind Listener ( func : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġfunc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Intercept Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhandled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Start X Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Last X Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Cancel Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Distance Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Distance Ġ= Ġy Distance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Last Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Last Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur X Ġ= Ġevent . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Y Ġ= Ġevent . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Distance Ġ= Ġcur X Ġ- Ġx Last ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Distance Ġ= Ġabs ( cur Y Ġ- Ġy Last ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Last Ġ= Ġcur X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Last Ġ= Ġcur Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġx Distance Ġ>= Ġtouch S lop Ġ&& Ġy Distance Ġ* Ġ 4 Ġ< Ġx Distance Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠFixed : ĠIllegalArgumentException : Ġpointer Index Ġout Ġof Ġrange ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ|| Ġsuper . on Intercept Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhandled ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġev . action ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġev . x ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN , ĠMotion Event . ACTION _ CANCEL Ġ-> Ġis Touch ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Touch ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æīĭ æĮĩ å¾Ģ åĽŀ æĶ¶ ï¼Į åĪĻ åıĸæ¶Ī å¼ĢåĲ¯ ä¾§ æłı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Cancel Ġ= Ġx Ġ< Ġswipe Last X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Last X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! swipe Cancel Ġ&& Ġ( x Ġ- Ġswipe Start X ) Ġ> Ġswipe S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Touch ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( ev ) ĊĠĠĠ Ġ} Ċ }