Android-ViewPager-循環(huán)滑動(dòng)(輪播)

一.問題

ViewPager可以左右滑動(dòng)頁, 但是不能從首頁跳到最后頁,也不能從最后頁跳到首頁愿待。
這就限制左右循環(huán)滑動(dòng)的功能, 難以實(shí)現(xiàn)輪播效果展鸡!

二.解決方法

方法一

監(jiān)聽ViewPager滑動(dòng)狀態(tài) OnPageChangeListener
1.當(dāng)首頁向右滑時(shí), ViewPager.setCurrentItem 設(shè)為最后頁;
2.當(dāng)最后頁向左滑時(shí), ViewPager.setCurrentItem 設(shè)為首頁阔蛉!
缺陷:很明顯首頁和最后頁過渡效果差衩婚,動(dòng)畫效果不好控制殴边,麻煩靖榕!

方法二

1.把ViewPager總頁數(shù)設(shè)為整數(shù)最大值,欺騙ViewPager(PagerAdapter),使得用戶不可能滑到邊界;
2.把ViewPager初始位置設(shè)為整數(shù)最大值的一半附近;
3.與ViewPager有關(guān)的position都要和真實(shí)總頁數(shù)取余數(shù),轉(zhuǎn)換為真實(shí)頁數(shù)欧聘!
方法二明顯比方法一過渡效果自然, 用戶不可能滑動(dòng)到整數(shù)最大值根吁!
雖然把總頁數(shù)設(shè)為整數(shù)最大值, 但是ViewPager創(chuàng)建總對(duì)象數(shù)并沒有增多, 性能消耗不變员淫!
此方法雖然是旁門左道,但是可行有效便捷击敌!

public class MainActivity extends Activity {
    int mPageSize; // 真實(shí)總頁數(shù)
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);     
        viewPager.setAdapter(new MyPagerAdapter());
        
        // 把初始位置設(shè)為總頁數(shù)一半(總頁數(shù)為虛構(gòu)最大值,用于欺騙ViewPager)
        // 減去余數(shù),使初始位置為真實(shí)首頁數(shù)
        int hMax = Integer.MAX_VALUE/2;     
        viewPager.setCurrentItem(hMax - (hMax%mPageSize)) ; 
        
        viewPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override           
            public void onPageSelected(int position) {              
                position = position%mPageSize; // 求余,恢復(fù)真實(shí)頁數(shù)
                ......          
            }
            
            @Override
            public void onPageScrolled(int position, float positionOffset,int positionOffsetPixels) {
                position = position%mPageSize; // 求余,恢復(fù)真實(shí)頁數(shù)
                ......
            }
            
            @Override       
            public void onPageScrollStateChanged(int state) {               
            }
        });
    }   

    private class MyPagerAdapter extends PagerAdapter {
        @Override       
        public int getCount() {
            // 把總頁數(shù)設(shè)為int最大值,欺騙ViewPager(PagerAdapter)
            // mPageSize才是真實(shí)總頁數(shù)
            return Integer.MAX_VALUE; 
        }

        @Override   
        public Object instantiateItem(ViewGroup container, int position) {
            position = position%mPageSize; // 求余,恢復(fù)真實(shí)頁數(shù)
            ......
        }

        @Override       
        public boolean isViewFromObject(View view, Object object) {     
        }

        @Override       
        public void destroyItem(ViewGroup container, int position, Object object) {
            position = position%mPageSize; // 求余,恢復(fù)真實(shí)頁數(shù)
            ......          
        }
    }

}

簡(jiǎn)書:
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/72633317
GitHub博客:http://lioil.win/2017/05/22/Android_ViewPager_Slide.html
Coding博客:http://c.lioil.win/2017/05/22/Android_ViewPager_Slide.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末介返,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圣蝎,老刑警劉巖刃宵,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異徘公,居然都是意外死亡牲证,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門关面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坦袍,“玉大人,你說我怎么就攤上這事等太∥嫫耄” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵缩抡,是天一觀的道長(zhǎng)奠宜。 經(jīng)常有香客問我,道長(zhǎng)瞻想,這世上最難降的妖魔是什么压真? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蘑险,結(jié)果婚禮上榴都,老公的妹妹穿的比我還像新娘。我一直安慰自己漠其,他們只是感情好嘴高,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著和屎,像睡著了一般拴驮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柴信,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天套啤,我揣著相機(jī)與錄音,去河邊找鬼随常。 笑死潜沦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的绪氛。 我是一名探鬼主播唆鸡,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枣察!你這毒婦竟也來了争占?” 一聲冷哼從身側(cè)響起燃逻,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臂痕,沒想到半個(gè)月后伯襟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡握童,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年姆怪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澡绩。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稽揭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出英古,到底是詐尸還是另有隱情淀衣,我是刑警寧澤昙读,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布召调,位于F島的核電站,受9級(jí)特大地震影響蛮浑,放射性物質(zhì)發(fā)生泄漏唠叛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一沮稚、第九天 我趴在偏房一處隱蔽的房頂上張望艺沼。 院中可真熱鬧,春花似錦蕴掏、人聲如沸障般。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挽荡。三九已至,卻和暖如春即供,著一層夾襖步出監(jiān)牢的瞬間定拟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工逗嫡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青自,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓驱证,卻偏偏與公主長(zhǎng)得像延窜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抹锄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容