package Ġcom . k ai . book page . page Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Configuration Ċ import Ġandroid . widget . TextView Ċ import Ġcom . k ai . book page . animation .* Ċ import Ġcom . k ai . book page . model . Cool Book Bean Ċ import Ġcom . k ai . common . utils . Log Utils Ċ import Ġjava . lang . Exception Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġ# Ġ é¡µéĿ¢ å±ķç¤º æİ§ä»¶ ï¼Į æĹł éľĢ åħ³ å¿ĥ æķ°æį® æĿ¥ æºĲ ï¼Į åĽłä¸º æķ°æį® æĿ¥ æºĲ åı¯èĥ½ æľī å¤ļ ç§į æĸ¹æ³ķ ãĢĤ éĻį ä½İ ç¨ĭåºı èĢ ¦ åĲĪ åº¦ ãĢĤ Ċ Ġ*/ Ċ class ĠPage View : ĠView { ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Page View " ĊĠĠĠ Ġ// å½ĵåīį View çļĦ å®½ åĳ ĥ åĳ ĥ ĊĠĠĠ Ġprivate Ġvar Ġm View Width Ġ= Ġ 0 ĊĠĠĠ Ġ// å½ĵåīį View çļĦ é«ĺ ĊĠĠĠ Ġprivate Ġvar Ġm View Height Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Start X Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Start Y Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġis Move Ġ= Ġfalse ĊĊĊĠĠĠ Ġprivate Ġvar Ġm Bg Color Ġ= Ġ- 0 x 3 1 3 d 6 4 ĊĠĠĠ Ġprivate Ġvar Ġm Page Mode Ġ= ĠPage Mode . NONE ĊĊĠĠĠ Ġ// æĺ¯åĲ¦ åħģè®¸ çĤ¹åĩ» ĊĠĠĠ Ġprivate Ġvar Ġcan Touch Ġ= Ġtrue ĊĠĠĠ Ġ// åĶ ¤ é ĨĴ èıľåįķ çļĦ åĮºåŁŁ ĊĠĠĠ Ġprivate Ġvar Ġm Center Rect Ġ: ĠRect F Ġ Ġ?= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Prepare Ġ Ġ= Ġfalse ĊĠĠĠ Ġ// åĬ¨çĶ» ç±» ĊĠĠĠ Ġprivate Ġvar Ġm Page Animation Ġ: ĠPage Animation ?= Ġnull ĊĠĠĠ Ġ// åĬ¨çĶ» çĽĳåĲ¬ ç±» ĊĠĠĠ Ġprivate Ġvar Ġm Page Animation Listener Ġ: ĠPage Animation . On Page ChangeListener Ġ= Ġobject Ġ: Page Animation . On Page ChangeListener { ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Pre Page (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Page View . has Pre Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhas Next (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Page View . hasNext Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpage Cancel (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Page View . page Cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// çĤ¹åĩ» çĽĳåĲ¬ ĊĠĠĠ Ġprivate Ġvar Ġm Touch Listener Ġ: ĠTouch Listener Ġ?= Ġnull ĊĠĠĠ Ġ// åĨħå®¹ åĬłè½½ åĻ¨ ĊĠĠĠ Ġprivate Ġvar Ġm Page Loader Ġ: ĠPage Loader Ġ?= Ġnull ĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ?) Ġ: this ( context , Ġattribute Set , Ġ 0 ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattribute Set : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper ( context , Ġattribute Set , Ġdef Style Attr ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Size Changed ( w : ĠInt , Ġh : ĠInt , Ġold w : ĠInt , Ġold h : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Size Changed ( w , Ġh , Ġold w , Ġold h ) ĊĠĠĠĠĠĠĠ Ġm View Width Ġ= Ġw ĊĠĠĠĠĠĠĠ Ġm View Height Ġ= Ġh ĊĠĠĠĠĠĠĠ Ġis Prepare Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Page Loader ?. prepare Display ( w , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Window () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detached From Window () ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. abort Animation () ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. clear () ĊĠĠĠĠĠĠĠ Ġm Page Loader Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Page Animation Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Pre Page () Ġ: Boolean { ĊĠĠĠĠĠĠĠ Ġ// ä¸į åģļ å®ŀéĻħ ä¸ĬçļĦ ç¿» é¡µ æĵįä½ľ ĊĠĠĠĠĠĠĠ Ġm Touch Listener ?. pre Page () ĊĠĠĠĠĠĠĠ Ġvar Ġhas Pre Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Page Loader ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å®ŀéĻħ ä¸ĬçļĦ ç¿» é¡µ æĵįä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Pre Ġ= Ġit . pre () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Pre ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ èĥĮæĻ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw Color ( m Bg Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw Color ( context . resources . getColor ( android . R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç»ĺ åĪ¶ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġevent ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! can Touch Ġ&& Ġevent . action Ġ!= ĠMotion Event . ACTION _ DOWN ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( event . action ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Start X Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Start Y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Move Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Touch Listener ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcan Touch Ġ= Ġit . on Touch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ æĺ¯åĲ¦ å¤§äºİ æľĢå°ı æ»ĳ åĬ¨ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs lop Ġ= ĠView Configuration . get ( context ). scaled Touch S lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Move Ġ= Ġabs ( m Start X Ġ- Ġevent . x ) Ġ> Ġs lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġabs ( m Start Y Ġ- Ġevent . y ) Ġ> Ġs lop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¦Ĥæŀľ æ»ĳ åĬ¨ äºĨ ï¼Į åĪĻ è¿Ľè¡Į ç¿» é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠLog Utils . e (" Page View ", Ġ" Motion Event . ACTION _ MOVE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Move ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® ä¸ŃéĹ´ åĮºåŁŁ èĮĥåĽ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Center Rect Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Center Rect Ġ= ĠRect F ( m View Width . toFloat () Ġ/ Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View Height . toFloat () Ġ/ Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View Height . toFloat () Ġ* Ġ 4 Ġ/ Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm View Height . toFloat () Ġ* Ġ 2 Ġ/ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĺ¯åĲ¦ çĤ¹åĩ» äºĨ ä¸ŃéĹ´ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontains Ġ= Ġm Center Rect ?. contains ( x . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( contains ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Touch Listener ?. center () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. on Touch Event ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġhas Next Page (): Boolean { ĊĠĠĠĠĠĠĠ Ġm Touch Listener ?. next Page () ĊĠĠĠĠĠĠĠ Ġvar Ġhas Next Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Page Loader ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhas Next Ġ= Ġit . next () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog Utils . e (" Page View "," hasNext Ġ$ hasNext ") ĊĠĠĠĠĠĠĠ Ġreturn Ġhas Next ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġpage Cancel (){ ĊĠĠĠĠĠĠĠ Ġm Touch Listener ?. cancel () ĊĠĠĠĠĠĠĠ Ġm Page Loader ?. page Cancel () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġcompute Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// è¿Ľè¡Į æ»ĳ åĬ¨ ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. scroll Animation () ĊĠĠĠĠĠĠĠ Ġsuper . compute Scroll () ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġdraw Current Page ( is Update : ĠBoolean ){ ĊĠĠĠĠĠĠĠ Ġif (! is Prepare ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif (! is Update ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( m Page Animation Ġis ĠScroll Page Animation ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Page Animation Ġas ĠScroll Page Animation ). reset Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠgetNext Bitmap ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Loader ?. draw Page ( it , Ġis Update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Touch Listener ( touch Listener : ĠTouch Listener ){ ĊĠĠĠĠĠĠĠ Ġm Touch Listener Ġ= Ġtouch Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// è®¾ç½® ç¿» é¡µ æ¨¡å¼ı ĊĠĠĠ Ġfun Ġset Page Mode ( page Mode : ĠPage Mode ){ ĊĠĠĠĠĠĠĠ Ġm Page Mode Ġ= Ġpage Mode ĊĠĠĠĠĠĠĠ Ġif ( m View Width Ġ== Ġ 0 Ġ|| Ġm View Height Ġ== 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen ( m Page Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Mode . SI MUL ATION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" Page View "," init ĠSimulation Page Animation Ġ Ġ$ m Page Mode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠSimulation Page Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Mode . COVER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠCover Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Mode . SL IDE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠSlide Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Mode . NONE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog Utils . e (" Page View "," init ĠNone Page Animation Ġ$ m Page Mode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠNone Page Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Mode . SCROLL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠScroll Page Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation Ġ= ĠNone Page Animation ( m View Width , Ġm View Height , Ġthis , Ġm Page Animation Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Bg Color ( bgColor : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġm Bg Color Ġ= Ġbg Color ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Page Animation ( direction : ĠPage Animation . Direction ){ ĊĠĠĠĠĠĠĠ Ġif ( m Touch Listener Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġabort Animation () ĊĠĠĠĠĠĠĠ Ġif ( direction Ġ== ĠPage Animation . Direction . NEXT ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġm View Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġm View Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Start Point ( x . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® çĤ¹åĩ» çĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Touch Point ( x . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® æĸ¹åĲĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Direction ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! hasNext Page ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġm View Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ åĬ¨çĶ» ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Start Point ( x . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® çĤ¹åĩ» ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Touch Point ( x . toFloat (), Ġy . toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Animation ?. set Direction ( direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! has Pre Page ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. start Animation () ĊĠĠĠĠĠĠĠ Ġpost Invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æĺ¯åĲ¦ èĥ½å¤Ł ç¿» é¡µ ĊĠĠĠ Ġfun Ġauto Pre Page () Ġ: Boolean { ĊĠĠĠĠĠĠĠ Ġvar Ġauto Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Ġ= Ġit Ġ! is ĠScroll Page Animation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( auto ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Page Animation ( Page Animation . Direction . PRE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġauto ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æĺ¯åĲ¦ èĥ½å¤Ł ç¿» é¡µ ĊĠĠĠ Ġfun Ġauto Next Page () Ġ: Boolean { ĊĠĠĠĠĠĠĠ Ġvar Ġauto Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauto Ġ= Ġit Ġ! is ĠScroll Page Animation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( auto ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Page Animation ( Page Animation . Direction . NEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġis Prepare () Ġ: Boolean { ĊĠĠĠĠĠĠĠ Ġreturn Ġis Prepare ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġis Running () Ġ: ĠBoolean { ĊĠĠĠĠĠĠĠ Ġif ( m Page Animation Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Page Animation !!. isRunning () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġdraw Next Page (){ ĊĠĠĠĠĠĠĠ Ġif (! is Prepare ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( m Page Animation Ġis ĠBase Horizontal Page Animation ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( m Page Animation Ġas ĠBase Horizontal Page Animation ). change Page () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠgetNext Bitmap ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Loader ?. draw Page ( it , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ# èİ·åıĸ é¡µéĿ¢ åĨħå®¹ çĶŁæĪĲ çļĦ Bitmap ĊĠĠĠĠ Ġ* Ġ@ return Ġbitmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetNext Bitmap (): ĠBitmap ? { ĊĠĠĠĠĠĠĠ Ġif ( m Page Animation Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ Ġm Page Animation ?. getNext Bitmap () ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠĠ Ġ* Ġ# Ġ Ġ å¤ĸéĥ¨ è°ĥçĶ¨ æŃ¤ æĸ¹æ³ķ ä½ľä¸º ç¨ĭåºı åħ¥ åı£ ï¼Ł ĊĠĠĠĠĠ Ġ* Ġ@ param Ġ[ cool Book Bean ] Ġ ä¹¦ ç± į å®ŀä½ĵ ç±» ĊĠĠĠĠĠ Ġ* Ġ@ return ĠPage Loader Ġ é¡µéĿ¢ åĬłè½½ åĻ¨ ĊĠĠĠĠĠ Ġ* Ġ@ date Ġ 2 0 2 1 / 4 / 1 4 ĊĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Page Loader ( cool Book Bean : ĠCool Book Bean , page Loader : ĠPage Loader ): ĠPage Loader ? { ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ æĺ¯åĲ¦ åŃĺåľ¨ , åŃĺåľ¨ çĽ´æİ¥ è¿ĶåĽŀ ĊĠĠĠĠĠĠĠ Ġif ( m Page Loader Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Page Loader !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æł¹æį® æķ°æį® ç±»åŀĭ Ġcool Book Bean . is Local ï¼Į èİ·åıĸ åħ·ä½ĵ åĬłè½½ åĻ¨ ĊĠĠĠĠĠĠĠ Ġm Page Loader Ġ= Ġpage Loader ĊĠĠĠĠĠĠĠ Ġif ( m View Width Ġ!= Ġ 0 Ġ|| Ġm View Height Ġ!= Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ Page Loader çļĦ å±ı å¹ķ å¤§å°ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Page Loader ?. prepare Display ( m View Width , Ġm View Height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Page Loader ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun Ġget Bg Bitmap (): ĠBitmap ? { ĊĠĠĠĠĠĠĠ Ġif ( m Page Animation Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Page Animation ?. get Bg Bitmap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠTouch Listener { ĊĠĠĠĠĠĠĠ Ġfun Ġon Touch () Ġ: Boolean ĊĠĠĠĠĠĠĠ Ġfun Ġcenter () ĊĠĠĠĠĠĠĠ Ġfun Ġpre Page () ĊĠĠĠĠĠĠĠ Ġfun Ġnext Page () ĊĠĠĠĠĠĠĠ Ġfun Ġcancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// å¦Ĥæŀľ æ»ĳ åĬ¨ çĬ¶æĢģ æ²¡æľī åģľæŃ¢ å°± åıĸæ¶Ī çĬ¶æĢģ ï¼Į éĩįæĸ° è®¾ç½® Animation çļĦ è§¦ ç¢ ° çĤ¹ ĊĠĠĠ Ġfun Ġabort Animation (){ ĊĠĠĠĠĠĠĠ Ġm Page Animation ?. abort Animation () ĊĠĠĠ Ġ} Ċ }