package Ġcom . f eng n iao . my b lib li . widget . tab layout Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . support . v 4 . view . ViewPager Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . widget . TextView Ċ Ċ class ĠMy On Page ChangeListener Ġ: ĠView Pager . On Page ChangeListener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtext Views : ĠList < TextView >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm ViewPager Title : ĠView Pager Title ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Dy name ic Line : ĠD y name ic Line ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm ViewPager : ĠView Pager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpager Count : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġscreen Width : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠlineWidth : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġevery Length : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlast Position : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġdis : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfix Left Dis : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġlocation Ġ= ĠInt Array ( 2 ) ĊĊĊĠĠĠ Ġconstructor ( context : ĠContext , Ġview Pager : ĠView Pager , Ġdy name ic Line : ĠD y name ic Line , Ġview Pager Title : ĠView Pager Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Length : ĠInt , Ġmargin : ĠInt , Ġfix Left Dis : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . m ViewPager Ġ= Ġview Pager ĊĠĠĠĠĠĠĠ Ġthis . m ViewPager Title Ġ= Ġview Pager Title ĊĠĠĠĠĠĠĠ Ġthis . m Dy name ic Line Ġ= Ġdy name ic Line ĊĠĠĠĠĠĠĠ Ġtext Views Ġ= Ġview Pager Title . getText View () ĊĠĠĠĠĠĠĠ Ġpager Count Ġ= Ġtext Views !!. size ĊĠĠĠĠĠĠĠ Ġscreen Width Ġ= Ġget Screen Width ( context Ġas ĠActivity ) ĊĊĠĠĠĠĠĠĠ ĠlineWidth Ġ= Ġget TextView Length ( text Views ! ![ 0 ]) ĊĊĠĠĠĠĠĠĠ Ġevery Length Ġ= Ġall Length Ġ/ Ġpager Count ĊĠĠĠĠĠĠĠ Ġdis Ġ= Ġmargin Ċ // ĠĠĠĠĠĠĠ Ġthis . fix Left Dis Ġ= Ġfix Left Dis ĊĊĠĠĠĠĠĠĠ Ġ// ç»Ļ view æ·»åĬł çĽĳåĲ¬ ï¼Į ä¾¿ äºİ åľ¨ view ç»ĺ åĪ¶ åīį èİ·åıĸ view çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġ// ä¸į å»ºè®® åľ¨ è¿ĻéĩĮ åģļ ä»»ä½ķ æĵįä½ľ view çļĦ æĵįä½ľ ï¼Į åĽłä¸º view çļĦ ç»ĺ åĪ¶ æĺ¯ å¤ļ æ¬¡ åıĳçĶŁ çļĦ ï¼Į æīĢä»¥ è¿Ļä¸ª æĸ¹æ³ķ ä¼ļ å¤ļ æ¬¡ è°ĥçĶ¨ Ċ // ĠĠĠĠĠĠĠ Ġview Pager Title . view Tree Observer . add On Pre Draw Listener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġevery Length Ġ= Ġview Pager Title . getText Linear Width () Ġ/ Ġpager Count Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscroll Right : ĠBoolean // é¡µéĿ¢ åĲĳ åı³ ĊĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠView Pager . SCROLL _ STATE _ SET TL ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Right Ġ= Ġlast Position Ġ< Ġm ViewPager !!. currentItem ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Position Ġ= Ġm ViewPager !!. currentItem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Position Ġ+ Ġ 1 Ġ< Ġtext Views !!. size Ġ&& Ġlast Position Ġ- Ġ 1 Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll Right ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Views ! ![ last Position Ġ+ Ġ 1 ]. getLocation On Screen ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Views ! ![ last Position Ġ- Ġ 1 ]. getLocation On Screen ( location ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( location [ 0 ] Ġ> Ġscreen Width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewPager Title !!. smooth Scroll By ( screen Width Ġ/ Ġ 2 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( location [ 0 ] Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewPager Title !!. smooth Scroll By (- screen Width Ġ/ Ġ 2 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( last Position Ġ> Ġposition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Offset Ġ> Ġ 0 . 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dy name ic Line !!. update View ((( position Ġ+ Ġ( position Offset Ġ- Ġ 0 . 5 ) Ġ* Ġ 2 ) Ġ* Ġevery Length Ġ+ Ġdis ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġ(( last Position Ġ+ Ġ 1 ) Ġ* Ġevery Length Ġ- Ġdis ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dy name ic Line !!. update View (( position Ġ* Ġevery Length Ġ+ Ġdis ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( last Position Ġ+ Ġposition Offset Ġ* Ġ 2 ) Ġ* Ġevery Length Ġ- Ġdis )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Offset Ġ> Ġ 0 . 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dy name ic Line !!. update View ((( position Ġ+ Ġ( position Offset Ġ- Ġ 0 . 5 ) Ġ* Ġ 2 ) Ġ* Ġevery Length Ġ+ Ġdis ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( position Ġ+ Ġ 2 ) Ġ* Ġevery Length Ġ- Ġdis ). toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Dy name ic Line !!. update View (( position Ġ* Ġevery Length Ġ+ Ġdis ). toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( position Ġ+ Ġ 1 Ġ+ Ġ 2 Ġ* Ġposition Offset ) Ġ* Ġevery Length Ġ- Ġdis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewPager Title !!. setCurrent Item ( position ) ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Screen Width ( activity : ĠActivity ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdm Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġactivity . window Manager . default Display . get Metrics ( dm ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdm . width Pixels ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġpublic Ġfun Ġget TextView Length ( textView : ĠTextView ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . paint . measure Text ( textView . text . toString ()). toInt () ĊĊ Ċ }