亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

Android客戶端實現(xiàn)圖片輪播控件

2019-12-12 06:41:43
字體:
供稿:網(wǎng)友

本文和大家一起寫一個Android圖片輪播控件,供大家參考,具體內(nèi)容如下

1. 輪播控件的組成部分

    我們以知乎日報Android客戶端的輪播控件為例,分析一下輪播控件的主要組成:   

    首先我們要有用來顯示圖片的View對象,根據(jù)上圖中底部中央的5個點,我們知道需要5個ImageView來顯示需要輪播的圖片,另外還需要5個ImageView來顯示5個點?,F(xiàn)在考慮以下輪播組件應(yīng)該具有的行為,首先需要每隔一定時間間隔切換到下一張圖片,并且圖片間切換的效果應(yīng)該是平滑的,就像“翻書”一樣。由此我們可以想到將5個圖片當(dāng)做ViewPager的Page,這樣圖片切換時自然會有平滑的效果。接下來,我們還要給底部的5個小點找一個父容器,由于它們是線性排列的,所以用LinearLayout是再合適不過了。然后,我們還要把ViewPager和容納5個點的LinearLayout放入一個父容器中,這里我們選擇使用垂直排列子View的LinearLayout。

    這樣一來,我們就得到了輪播控件的布局文件(carousel_layout.xml):

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="match_parent"       android:layout_height="match_parent"       android:orientation="vertical">  <android.support.v4.view.ViewPager    android:id="@+id/view_pager"    android:layout_width="match_parent"    android:layout_height="match_parent" />  <LinearLayout    android:id="@+id/dots"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_gravity="bottom"    android:gravity="center"    android:orientation="horizontal"    android:padding="8dp" >  </LinearLayout>  </LinearLayout>

    通過對輪播控件的組成部分進行分析,我們已經(jīng)確定了用什么“數(shù)據(jù)結(jié)構(gòu)”來表示一個輪播組件,那么接下來,我們要做的就是實現(xiàn)輪播組件的”算法“,也就是業(yè)務(wù)邏輯。

2. 輪播組件的行為分析

    輪播控件首先要具有的行為是自動播放,也就是每隔一定事件間隔(通常是3到5秒),便自動”翻到下一頁“。為了實現(xiàn)這一點,我們可以維護一個currentItem變量來記錄當(dāng)前正在顯示的圖片,然后設(shè)置一個定時任務(wù),調(diào)用ViewPager的setCurrentItem方法設(shè)置當(dāng)前要顯示的圖片,并將currentItem設(shè)為下一張要顯示的圖片。有一點需要我們注意的便是播放到最后一張圖片時,下一個被顯示的應(yīng)該是第一個圖片,而且切換的效果也不再是平滑的。

    輪播控件的還要能響應(yīng)我們的滑動動作,也就是我們能夠通過左右滑動來在不同的圖片之間切換,這個行為ViewPager自動為我們提供了。另外還有一個輪播控件應(yīng)該具備的行為是:當(dāng)切換到指定圖片時,相應(yīng)的圓點應(yīng)該以區(qū)別其他4個圓點的顏色顯示,以便用戶能夠知道當(dāng)前正在播放的是第幾個圖片。要實現(xiàn)這一點也不復(fù)雜,只需要為ViewPager添加一個OnPageChangeListener監(jiān)聽器,然后重寫相應(yīng)的回調(diào)方法即可,這樣當(dāng)用戶選定了某個Page時,onPageSelected方法會被回調(diào),系統(tǒng)會傳入當(dāng)前Page的索引,我們便可以根據(jù)這個索引設(shè)置相應(yīng)的圓點顏色。

 3. 輪播控件的具體實現(xiàn)

    經(jīng)過以上的分析,我們已經(jīng)清楚的了解了輪播組件的表示及業(yè)務(wù)邏輯,接下來只要我們用Java把這些描述出來就大功告成了。

(1)定時任務(wù)
    我們需要定時執(zhí)行“改變ViewPager當(dāng)前Page為下一個Page”這一任務(wù),這里我們采用Handler來實現(xiàn),代碼如下:

mHandler.postDelayed(task, DELAY);  private final Runnable task = new Runnable() {    @Override    public void run() {      if (isAutoPlay) {        currentItem = (currentItem + 1) % (mTopStories.size());        mVP.setCurrentItem(currentItem);        mHandler.postDelayed(task, DELAY);      } else {        mHandler.postDelayed(task, DELAY);      }    }  };

    在以上代碼中,DELAY代表我們設(shè)置的一個延遲常量(單位ms)。由于我們需要的是循環(huán)播放,因此第5張顯示完畢后應(yīng)該顯示第一張,所以我們要想第6行那樣進行一個模運算,這樣currentItem就在0到4之間不停變化了。注意第5行有一個isAutoPlay變量,這個變量表示當(dāng)前是否應(yīng)該自動播放。那么什么時候不應(yīng)該自動播放呢?我們知道當(dāng)我們滑動手指切換圖片時,圖片會“跟隨”著我們的手,就好比我們翻書頁的時候,只有松開了手書頁才能落下。所以我們正在“拖動”圖片時,也就是我們的手還沒松開時,輪播控件是不應(yīng)該自動播放的。為了實現(xiàn)這一點,我們只需重寫OnPageChangeListener中的onPageScrollStateChanged方法,在當(dāng)前狀態(tài)為“拖動”時設(shè)置isAutoPlay變量為false。從第10行我們可以知道,當(dāng)autoPlay為false時,不會改變當(dāng)前顯示的圖片,僅僅會等過了DELAY指定的時間后再執(zhí)行下一次定時任務(wù)。 

(2)OnPageChangeListener
    上面我們提到了要給ViewPager添加一個OnPageChangeListener監(jiān)聽器對象,來實現(xiàn)小圓點顏色的改變以及autoPlay變量的賦值。具體的實現(xiàn)請看以下代碼,代碼的含義都很直接:

class TopOnPageChangeListener implements ViewPager.OnPageChangeListener {    @Override    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }    @Override    public void onPageSelected(int position) {      for (int i = 0; i < mDotsIV.size(); i++) {        if (i == position) {          mDotsIV.get(i).setImageResource(R.drawable.dot_focus);        } else {          mDotsIV.get(i).setImageResource(R.drawable.dot_blur);        }      }    }    @Override    public void onPageScrollStateChanged(int state) {      switch (state) {        //SCROLL_STATE_DRAGGING        case 1:          isAutoPlay = false;          break;        //SCROLL_STATE_SETTLING        case 2:          isAutoPlay = true;          break;        default:          break;      }    }  }

    在以上代碼的第10到16行,我們重寫了onPageSelected方法,position參數(shù)表示當(dāng)前Page的索引。這個方法中,我們設(shè)置當(dāng)前圖片對應(yīng)的圓點圖片為dot_focus,設(shè)置其他圓點的圖片為dot_blur,這樣用戶就能知道當(dāng)前的位置。在第21行到32行,我們重寫了onPageScrollStateChanged方法,state參數(shù)代表了當(dāng)前的“滾動狀態(tài),這個值為1表示當(dāng)前用戶正在”拖動“的過程中,因此要設(shè)置isAutoPlay為false;這個值為2表示用戶松開了手,圖片正在”滾動“中,這時我們就要把isAutoPlay設(shè)回默認(rèn)值true,恢復(fù)自動播放。

 (3) 更進一步
    有時候我們希望能夠從最后一頁直接“翻到”第一頁,而這種行為默認(rèn)不被PagerView所支持,要想實現(xiàn)這個行為,我們可以在PagerView中增加一些“輔助頁”,并重寫OnPageChangeLisener中的相關(guān)方法。然而我們在很多場景中只需要保持PagerView的默認(rèn)行為就好,要注意增加任何功能都要考慮應(yīng)用場景,避免畫蛇添足。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
男生裸体视频网站| 国产一区二区免费视频| 国产综合色一区二区三区| 亚洲欧美一区二区三区情侣bbw| 高清国产在线一区| 尤物在线视频| 99精品免费| 日韩av中文字幕一区二区三区| 中文字幕免费在线播放| 精品国产一区二区亚洲人成毛片| 最新热久久免费视频| аⅴ成人天堂中文在线| 蜜桃视频一区| 亚洲欧美日韩系列| 97精品国产| 亚洲成a人v欧美综合天堂麻豆| 国产精品综合久久久久久| 成人av一级片| 欧美亚洲免费在线| 深夜福利免费在线观看| 亚洲精品一二区| 亚洲h色精品| 91精品中文在线| 欧美日韩国产亚洲一区| 久久电影院7| 中文字幕制服丝袜一区二区三区| 中文字幕精品视频| 亚洲熟妇国产熟妇肥婆| av在线资源观看| 蜜臀一区二区三区精品免费视频| 国产精品色婷婷在线观看| 精品动漫一区二区三区| 超碰在线免费| 国产一区二区三区奇米久涩| 国产精品三级久久久久久电影| 欧美日韩中文字幕视频| 欧美人成免费网站| 久久久久亚洲精品| 国产天堂视频在线观看| 欧美动漫一区二区| 欧美精品aa| 国产免费美女视频| 色欧美乱欧美15图片| 亚洲v精品v日韩v欧美v专区| 大奶在线精品| 水蜜桃久久夜色精品一区的特点| 亚洲av综合色区无码一二三区| 日韩欧美www| www日韩视频| 欧美最猛黑人猛交69| 成人久久久精品国产乱码一区二区| 国产91热爆ts人妖在线| 亚洲一级片在线观看| 国产色在线观看| 91精品国自产在线观看| 免费看久久久| 午夜精品久久久久99热蜜桃导演| 无码人妻丰满熟妇精品| 欧美日韩理论| 国产在线精品播放| 亚洲成年网站在线观看| 欧美日韩国产成人高清视频| 宅男在线国产精品| 快she精品国产999| 国产偷国产偷精品高清尤物| 日本国产在线视频| 国产男女无遮挡猛进猛出| 99久久免费观看| 国产成人精品亚洲日本在线观看| 欧美一级精品在线| 无码人妻精品一区二区三区温州| 秋霞影院一区二区三区| 亚洲精品福利电影| 国产精品久久久久久久久妇女| 国产精品久久久久影院日本| 少妇真人直播免费视频| 五月国产精品| 亚洲的天堂在线中文字幕| 香蕉在线观看视频| 先锋影音一区二区三区| 欧美亚洲一区二区在线| 黄页网址大全在线播放| 羞羞视频在线免费看| 日韩精品亚洲aⅴ在线影院| 久草视频国产在线| 26uuu成人网一区二区三区| 超级碰在线观看| 国产一区二区片| 久久亚洲春色中文字幕久久久| 风流少妇一区二区| 一级毛片电影| 中文字幕成人动漫| 欧美日韩精品一区二区三区在线观看| x99av成人免费| 精品久久久久一区二区三区| 丰满的少妇愉情hd高清果冻传媒| 国产农村妇女毛片精品久久莱园子| 一本久道中文字幕精品亚洲嫩| 欧美激情精品久久久久久| 亚洲欧美国产日韩天堂区| 国产中文欧美日韩在线| 国产精品午夜春色av| 一区二区三区在线观看网站| 在线成人欧美| eeuss影院在线观看第一页| 亚洲电影中文字幕在线观看| 国产精品一线| 久草资源站在线观看| 久久精品欧美日韩| 欧美色国产精品| 欧美三区不卡| 美国一级片在线免费观看视频| 青檬在线电视剧在线观看| 日韩精品一区二区视频| 外国成人直播| 91免费看片在线| 亚洲高清在线观看| 在线丨暗呦小u女国产精品| 国产主播av在线| 日韩一区二区三区四区在线| 视频在线观看免费高清| 日韩精品一区二区三区三区免费| 欧美大电影免费观看| www.国产精品一二区| 一卡二卡在线观看| 狠狠色丁香久久婷婷综合丁香| 成人3d动漫网站| 欧美三级蜜桃2在线观看| eeuss鲁片一区二区三区| 日韩欧美字幕| 日韩欧美国产麻豆| 国产精品嫩草在线观看| 亚洲欧洲精品一区二区三区| 欧美日韩免费精品| 一级全黄肉体裸体全过程| 给我免费播放片在线观看| 9999精品成人免费毛片在线看| 国产传媒免费观看| 日日夜夜精品免费| 老司机精品视频一区二区| 日本大胆人体视频| 亚洲国产伊人| 伊人影院在线观看| 欧美日韩精品在线观看视频| 视频一区视频二区欧美| 亚洲成人日韩| 东京热一区二区三区四区| 国产精品视频一二| 欧美孕妇孕交黑巨大网站| 久久久午夜精品福利内容| 中日韩黄色大片| 成人三级高清视频在线看| 啊啊啊啊啊啊啊视频在线播放| 在线观看天堂| 成人影院中文字幕| 久久电影网站中文字幕| 成人午夜av影视| 91精品国产777在线观看| 国产毛片毛片毛片毛片毛片| 欧美aa视频| 国产免费av高清在线| 成人免费视频一区二区| 一色桃子av在线| 欧美色图在线视频| 精品视频全国免费看| www.av天天| 99久久久国产精品无码网爆| 成人国产精品久久久网站| 欧美日韩性视频在线| 国产精品入口免费视频一| 日本高清视频一区二区三区| 国产高潮av| 六月婷婷激情网| 四虎影院一区二区三区| 欧美三级三级三级| 国产精品一级黄| 久久9热精品视频| 国产精品青草久久久久福利99| 国产美女视频免费| 欧美韩国理论所午夜片917电影| 国产一区二区91| 俺去俺来也在线www色官网| av电影在线观看网址| 亚洲精品一区二区三区四区| 亚洲a成v人在线观看| 日韩在线短视频| 中文av资源在线| 香港三日本8a三级少妇三级99| 日本午夜精品理论片a级appf发布| 超碰在线亚洲| 在线伊人电影| 在线免费激情视频| 一区二区三区四区五区视频| 国内精品久久久久久影院老狼| 欧美午夜欧美| 中文字幕免费观看视频| 欧美极品一区| 国产亚洲精品美女久久| 久久久久久午夜| 九九精品在线观看视频| 中文乱码字幕av网站| 一级在线观看视频| 欧美一区二区三区成人| 成人午夜视频免费观看| 在线播放国产精品| 免费看男女www网站入口在线| 欧美老女人第四色| 白白色在线发布| 日韩av系列| 91亚洲人成网污www| 日韩精品成人一区二区三区| 欧美精品丝袜久久久中文字幕| 午夜在线a亚洲v天堂网2018| 91小视频在线| 亚洲一级片在线观看| av在线天堂| 国产精品激情偷乱一区二区∴| 在线观看黄色片| 中文字幕校园春色| 欧美综合视频在线观看| 91社区在线观看播放| 国产美女视频一区二区三区| 中文字幕在线观看第二页| 四虎久久免费| 小明看看成人免费视频| 超碰国产精品一区二页| 国产成人在线中文字幕| 亚洲网站视频在线观看| 亚洲国产精品大全| 国产一区二区在线网站| aa免费在线观看| gogogo免费高清日本写真| 九九九免费视频| h狠狠躁死你h高h| 欧美精品一区二区三区在线四季| 亚洲午夜免费视频| 国产a∨精品一区二区三区不卡| 欧美日韩视频免费播放| 国产精品一区免费在线观看| 日本 欧美 国产| 欧美日韩的一区二区| 亚洲欧美日本视频在线观看| 在线观看视频一区二区欧美日韩| 午夜在线精品| 国产黄色免费网| 国产精品久久久久久久免费| 亚洲色图25p| 国产精品成人aaaaa网站| hd国产人妖ts另类视频| av电影一区二区三区| xf在线a精品一区二区视频网站| 精品久久久精品| 一区二区视频免费完整版观看| 2018国产在线| 亚洲美洲欧洲综合国产一区| 欧美精品在欧美一区二区少妇| 亚洲精品久久久久久久久久久久久| 欧妇女乱妇女乱视频| 欧美一a一片一级一片| 99热久久这里只有精品| www.超级碰| brazzers在线观看| 国产一区二区三区av在线| 国产在线98福利播放视频| 成人97人人超碰人人99| 午夜娱乐在线| 亚洲精品中文字幕乱码| 免费观看又污又黄在线观看国产| 亚洲自拍偷拍麻豆| 大片免费在线观看| 18欧美亚洲精品| 成人线上视频| 91aaa在线观看| 欧美最猛性xxxx| 欧洲精品视频在线| 亚洲图片欧美综合| 亚洲资源在线观看| 乱码第一页成人| aa视频在线播放| 亚洲影院一区二区三区| 欧美国产中文高清| 在线成人午夜影院| 亚洲丝袜精品| 在线观看国产麻豆| av网站在线免费观看| 91精品国产高潮对白| 蜜臀一区二区三区| 91免费在线播放| 亚洲啪啪综合av一区二区三区| 91天天综合| 春意影院普通入口| 好男人官网在线| 国产成人在线视频免费观看| 最好看的2019的中文字幕视频| 成人免费观看男女羞羞视频| 国产拍在线视频| 国产欧美久久久精品影院| 中文在线播放一区二区| 二区视频在线观看| 影音先锋5566中文源资源| 亚洲午夜激情网站| 国产精品久久久久久| 欧美成人直播| 国产精品一区二区a| 91精品国产91久久久久久一区二区| 在线免费观看成人短视频| av免费在线一区二区三区| 岳乳丰满一区二区三区| 干日本少妇首页| 亚洲黄色三级视频| av无码精品一区二区三区宅噜噜| 久久精品性爱视频| 一本色道久久综合狠狠躁篇的优点| 日韩精品一二三区| 免费观看久久久4p| 成人av免费在线观看| 成人春色在线观看免费网站| 91美女精品网站| 精品999成人| 黄色在线论坛| 中国动漫在线观看完整版免费| 久草资源在线观看| 欧美日韩一区成人| 国产精品对白久久久久粗| 亚洲伦伦在线| 老司机午夜免费精品视频| 成人嘿咻视频免费看| 亚洲最大av网站|