package Ġcom . ren yu . big image demo . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gesture Detector Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Scroller Ċ import Ġjava . io . InputStream Ċ Ċ class ĠBig ImageView Ġ: ĠView , ĠGest ure Detector . On Gesture Listener , ĠView . On Touch Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Bitmap : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Options : ĠBitmap Factory . Options ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Rect : ĠRect ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Bitmap Region Decoder : ĠBitmap Region Decoder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Scale Ġ= Ġ 1 . 0 f ĊĊĠĠĠ Ġprivate Ġvar Ġimage Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġimage Height Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġview Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġview Height Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Gesture Detector : ĠGest ure Detector ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Scroller : ĠSc roller ? Ġ= Ġnull ĊĊĠĠĠ Ġconstructor ( context : ĠContext ) Ġ: Ġthis ( context , Ġnull ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġthis ( context , Ġattrs , Ġ 0 ) ĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( ĊĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠ Ġattrs , ĊĠĠĠĠĠĠĠ Ġdef Style Attr ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġm Rect Ġ= ĠRect () ĊĠĠĠĠĠĠĠ Ġm Gesture Detector Ġ= ĠGest ure Detector ( context , Ġthis ) ĊĠĠĠĠĠĠĠ Ġset On Touch Listener ( this ) ĊĠĠĠĠĠĠĠ Ġm Scroller Ġ= ĠSc roller ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Image ( inputStream : ĠInputStream ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Options !!. in Just Decode Bounds Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( inputStream , Ġnull , Ġm Options ) ĊĊĠĠĠĠĠĠĠ Ġimage Width Ġ= Ġm Options !!. out Width ĊĠĠĠĠĠĠĠ Ġimage Height Ġ= Ġm Options !!. out Height ĊĊĠĠĠĠĠĠĠ Ġm Options !!. in Mutable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġm Options !!. in Preferred Config Ġ= ĠBitmap . Config . RGB _ 5 6 5 ĊĠĠĠĠĠĠĠ Ġm Options !!. in Just Decode Bounds Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// Ġis Share able ä¸º false ä»£è¡¨ åĽ¾çīĩ èµĦæºĲ ä¸į åħ±äº« ĊĠĠĠĠĠĠĠ Ġm Bitmap Region Decoder Ġ= ĠBitmap Region Decoder . newInstance ( inputStream , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġrequest Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġview Width Ġ= Ġmeasured Width ĊĠĠĠĠĠĠĠ Ġview Height Ġ= Ġmeasured Height ĊĊĠĠĠĠĠĠĠ Ġm Scale Ġ= Ġview Width Ġ* Ġ 1 . 0 f Ġ/ Ġimage Width ĊĊĠĠĠĠĠĠĠ Ġm Rect !!. left Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Rect !!. top Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġm Rect !!. right Ġ= Ġimage Width ĊĊĠĠĠĠĠĠĠ Ġm Rect !!. bottom Ġ= Ġ( view Height Ġ/ Ġm Scale ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw ( canvas : ĠCanvas ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Bitmap Region Decoder Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Options !!. in Bitmap Ġ= Ġm Bitmap Ċ // ĠĠĠĠĠĠĠ Ġcalc ute In Sample Size () ĊĠĠĠĠĠĠĠ Ġm Bitmap Ġ= Ġm Bitmap Region Decoder !!. decode Region ( m Rect !! , Ġm Options !! ) ĊĠĠĠĠĠĠĠ Ġval Ġmatrix Ġ= ĠMatrix () ĊĠĠĠĠĠĠĠ Ġmatrix . set Scale ( m Scale , Ġm Scale ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ ä½¿çĶ¨ éĩĩ æł· ï¼Į åĪĻ éľĢ ä½¿çĶ¨ æŃ¤ æĸ¹æ³ķ å°Ĩ åĽ¾çīĩ çļĦ å®½ é«ĺ éĩįæĸ° è°ĥæķ´ ä¸Ģä¸ĭ Ċ // ĠĠĠĠĠĠĠ Ġmatrix . set Scale ( m Scale Ġ* Ġm Options !!. in Sample Size , Ġm Scale Ġ* Ġm Options !!. in Sample Size ) ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Bitmap ( m Bitmap !! , Ġmatrix , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ åĽ¾çīĩ åįł çĶ¨ åĨħåŃĺ å¤§å°ı Ġ 4 7 0 2 1 4 7 2 ĊĠĠĠĠĠĠĠ Ġ// Ġä½¿çĶ¨ éĩĩ æł· åĲİ åįł çĶ¨ åĨħåŃĺ å¤§å°ı Ġ 2 9 3 7 3 8 4 ĊĠĠĠĠĠĠĠ ĠLog . d (" TAG TAG TAG ", Ġ"${ m Bitmap !!. allocation Byte Count }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalc ute In Sample Size () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġin Sample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( image Width Ġ/ Ġmeasured Width Ġ> Ġin Sample Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Sample Size Ġ*= Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Options !!. in Sample Size Ġ= Ġin Sample Size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Down ( e : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 Ġ{ ĊĠĠĠĠĠĠĠ Ġm Rect !!. offset ( 0 , Ġdistance Y . toInt ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( m Rect !!. top Ġ<= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. top Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. bottom Ġ= Ġ( view Height Ġ/ Ġm Scale ). toInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( m Rect !!. bottom Ġ>= Ġimage Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. top Ġ= Ġimage Height Ġ- Ġ( view Height Ġ/ Ġm Scale ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. bottom Ġ= Ġimage Height ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ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 Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfl ing èĮĥåĽ´ ä¸º Ġ 0 åĪ° image Height Ġ- Ġ( view Height Ġ/ Ġm Scale ). toInt () ä¹ĭéĹ´ ĊĠĠĠĠĠĠĠ Ġm Scroller !!. fl ing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. top , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- velocity Y . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Height Ġ- Ġ( view Height Ġ/ Ġm Scale ). toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch ( v : ĠView ?, Ġevent : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Gesture Detector !!. on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompute Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . compute Scroll () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Scroller !!. compute Scroll Offset ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfl ing æĹ¶ ä¼ļ è§¦åıĳ åĪ° æŃ¤ å¤Ħ è¿Ľè¡Į æ»ļ åĬ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. top Ġ= Ġm Scroller !!. curr Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Rect !!. bottom Ġ= Ġm Rect !!. top Ġ+ Ġ( view Height Ġ/ Ġm Scale ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }