ViewPager(二)

需要ViewPager托管非fragment視圖時锭亏,就需要實現(xiàn)原生PagerAdapter接口诉瓦,比如托管圖片
要實現(xiàn)PagerAdapter接口姐呐,則需要了解ViewPager-PagerAdapter和RecyclerView-Adapter各自關系的異同
PagerAdapter不使用可返回視圖的onBindViewHolder方法豁跑,而使用以下方法

public Object instantiateItem(ViewGroup container,int position)
public void destroyItem(ViewGroup container,int position,Object object)
public abstract boolean isViewFromObject(View view,Object object)

方法一:創(chuàng)建指定位置的列表項視圖廉涕,然后將其添加給ViewGroup視圖容器。并不要求立即創(chuàng)建視圖艇拍,PagerAdapter可自行決定何時創(chuàng)建視圖
方法二:銷毀已建視圖
方法三:判斷pager的一個view是否和instantiateItem返回的object匹配
貼一下網上搜到的答案網址:https://segmentfault.com/q/1010000000484617

前提概念:
ViewPager里面對每個頁面的管理是key-value形式的狐蜕,也就是說每個page都有個對應的id(id是object類型),需要對page操作的時候都是通過id來完成的
首先看這個函數(shù)
public Object instantiateItem(ViewGroup container, int position)卸夕;
這是pageAdapter里的函數(shù)层释,功能就是往PageView里添加自己需要的page。同時注意它還有個返回值object快集,這就是那個id贡羔。
最后
public abstract boolean isViewFromObject (View view, Object object)
這個函數(shù)就是用來告訴框架,這個view的id是不是這個object个初。
谷歌官方推薦把view當id用乖寒,所以常規(guī)的instantiateItem()函數(shù)的返回值是你自己定義的view,而isViewFromObject()的返回值是view == object勃黍。
ps:感覺這個機制應該是歷史遺留問題宵统,屬于改bug改出來的機制。否則官方不會推薦這種把view當id的做法

用ViewPager來實現(xiàn)應用的引導頁

//初始化引導頁數(shù)據(jù)
//本例中引導頁有四張圖片
    private void initGuideDate()
    {
        mImageIds=new ArrayList<>();
        mImageIds.add(R.drawable.guide_1);
        mImageIds.add(R.drawable.guide_2);
        mImageIds.add(R.drawable.guide_3);
        mImageIds.add(R.drawable.guide_4);
    }
//初始化引導頁布局
//用四個ImageView來裝這四張圖片
    private void initGuideView()
    {
        mImageViews=new ArrayList<>();
        for(int i=0;i<mImageIds.size();++i)
        {
            ImageView imageView=new ImageView(this);
            mImageViews.add(imageView);
        }
    }

    //初始化ViewPager
    //并且為其添加監(jiān)聽事件實現(xiàn)滑動最后一頁一定距離時跳轉到登錄頁
    private void initViewPager()
    {
        mViewPager=(ViewPager)findViewById(R.id.view_pager);
        mViewPager.setAdapter(new GuideAdapter());
        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }
            @Override
            public void onPageSelected(int position) {
                currentItem=position;
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        mViewPager.setOnTouchListener(new View.OnTouchListener() {
            float startX;
            float startY;
            float endX;
            float endY;
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        startX=event.getX();
                        startY=event.getY();
                        break;
                    case MotionEvent.ACTION_UP:
                        endX=event.getX();
                        endY=event.getY();
                        //獲取屏幕長度
                        WindowManager windowManager=(WindowManager)getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
                        Point size=new Point();
                        windowManager.getDefaultDisplay().getSize(size);
                        int width=size.x;
                        //首先確定是否到了最后一頁覆获,在判斷滑動距離是否符合
                        if((currentItem==(mImageIds.size()-1))&&(startX-endX>0)&&(startX-endX>(width/4)))
                        {
                            Intent intent=LoginActivity.newIntent(GuideActivity.this);
                            startActivity(intent);
                            finish();
                        }
                        break;
                }
                return false;
            }
        });

    }
private class GuideAdapter extends PagerAdapter
    {
        @Override
        public int getCount()
        {
            return mImageViews.size();
        }

        //判斷當前分頁是不是view马澈,因為ViewPager的分頁可以填入Fragment
        @Override
        public boolean isViewFromObject(View view,Object object)
        {
            return view==object;
        }

        //清理內存,釋放滑過的頁的內存
        @Override
        public void destroyItem(ViewGroup container,int position,Object object)
        {
            container.removeView(mImageViews.get(position));
        }

        //初始化分頁
        @Override
        public Object instantiateItem(ViewGroup container,int position)
        {
            ImageView imageView=mImageViews.get(position);
            imageView.setImageResource(mImageIds.get(position));
            container.addView(imageView);
            return imageView;
        }


    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末弄息,一起剝皮案震驚了整個濱河市痊班,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摹量,老刑警劉巖涤伐,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缨称,居然都是意外死亡凝果,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門睦尽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來器净,“玉大人,你說我怎么就攤上這事当凡∩胶Γ” “怎么了纠俭?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浪慌。 經常有香客問我冤荆,道長,這世上最難降的妖魔是什么权纤? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任钓简,我火速辦了婚禮,結果婚禮上妖碉,老公的妹妹穿的比我還像新娘涌庭。我一直安慰自己,他們只是感情好欧宜,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布坐榆。 她就那樣靜靜地躺著,像睡著了一般冗茸。 火紅的嫁衣襯著肌膚如雪席镀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天夏漱,我揣著相機與錄音豪诲,去河邊找鬼。 笑死挂绰,一個胖子當著我的面吹牛屎篱,可吹牛的內容都是我干的。 我是一名探鬼主播葵蒂,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼交播,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了践付?” 一聲冷哼從身側響起秦士,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎永高,沒想到半個月后隧土,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡命爬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年曹傀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饲宛。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡皆愉,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情亥啦,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布练链,位于F島的核電站翔脱,受9級特大地震影響,放射性物質發(fā)生泄漏媒鼓。R本人自食惡果不足惜届吁,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绿鸣。 院中可真熱鬧疚沐,春花似錦、人聲如沸潮模。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽擎厢。三九已至究流,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間动遭,已是汗流浹背芬探。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厘惦,地道東北人偷仿。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像宵蕉,于是被迫代替她去往敵國和親酝静。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內容