Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)
如何實(shí)現(xiàn)循環(huán)播放
現(xiàn)在網(wǎng)上實(shí)現(xiàn)循環(huán)播放都是在adapter的getCount()方法返回一個(gè)較大的值并且instantiateItem(ViewGroup container, int position)中通過取余(position/datas.size())的方式,讓ViewPager不斷的播放下去。
這里我們通過修改數(shù)據(jù)源和設(shè)置currentItem的方式實(shí)現(xiàn)。
修改數(shù)據(jù)源:
final List<Integer> datas = new ArrayList<>();
//這里添加測試數(shù)據(jù),實(shí)際項(xiàng)目中可以是從網(wǎng)絡(luò)獲取數(shù)據(jù)
datas.add(R.mipmap.welcome_page_01);
datas.add(R.mipmap.welcome_page_02);
datas.add(R.mipmap.welcome_page_03);
//處理數(shù)據(jù)源
datas.add(0,datas.get(datas.size()-1));
datas.add(datas.get(1));
設(shè)置currentItem需要在OnPageChangeListener對象中進(jìn)行:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position==0){
mViewPager.setCurrentItem(datas.size()-2,false);
}else if(position==datas.size()-1){
mViewPager.setCurrentItem(1,false);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Adapter和一般的ViewPager的Adapter一樣即可。
如何實(shí)現(xiàn)自動(dòng)循環(huán):
實(shí)現(xiàn)自動(dòng)循環(huán),方法比較多,比如Timer,Handler,Alarm等等。這里我們使用Handle的方式
自定義Handler類如下:
public class BannerHander extends Handler{
@Override
public void handleMessage(Message msg) {
if(msg.what==1){
mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
sendEmptyMessageDelayed(1,3000);
}
}
}
獲取數(shù)據(jù),給ViewPager設(shè)置Adapter之后就可以啟動(dòng)自動(dòng)循環(huán):
if(!(mHandler!=null && mHandler.get()!=null)){
mHandler = new WeakReference<BannerHander>(new BannerHander());
}
mHandler.get().sendEmptyMessageDelayed(1, 300);
這里我們是用了弱引用,主要是為了防止出現(xiàn)內(nèi)存溢出。
注意:
在設(shè)置CurrentItem時(shí)一定要在OnPageChangeListener中進(jìn)行,Adapter的finishUpdate(View view)中設(shè)置會(huì)出現(xiàn)白屏的情況。如果哪位大神知道,麻煩指教下。
- Android ViewPager實(shí)現(xiàn)無限循環(huán)輪播廣告位Banner效果
- Android ViewPager循環(huán)播放廣告實(shí)例詳解
- Android實(shí)現(xiàn)Banner界面廣告圖片循環(huán)輪播(包括實(shí)現(xiàn)手動(dòng)滑動(dòng)循環(huán))
- Android 使用viewpager實(shí)現(xiàn)無限循環(huán)(定時(shí)+手動(dòng))
- Android viewpager中動(dòng)態(tài)添加view并實(shí)現(xiàn)偽無限循環(huán)的方法
- Android ViewPager實(shí)現(xiàn)無限循環(huán)效果
- Android實(shí)現(xiàn)輪播圖無限循環(huán)效果
- Android仿京東淘寶自動(dòng)無限循環(huán)輪播控件思路詳解
- Android ViewPager實(shí)現(xiàn)智能無限循環(huán)滾動(dòng)回繞效果
- Android開發(fā)實(shí)現(xiàn)廣告無限循環(huán)功能示例
相關(guān)文章
Android檢測手機(jī)多點(diǎn)觸摸點(diǎn)數(shù)的方法
這篇文章主要為大家詳細(xì)介紹了Android檢測手機(jī)多點(diǎn)觸摸點(diǎn)數(shù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android 網(wǎng)絡(luò)請求框架Volley實(shí)例詳解
這篇文章主要介紹了Android 網(wǎng)絡(luò)請求框架Volley實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
詳解MVP模式在Android開發(fā)中的應(yīng)用
MVP是MVC衍生而來的,很早以前就由某軟公司提出,近年來在Android應(yīng)用開發(fā)中越來越多的被提及,越來越重要了。這篇文章主要介紹了詳解MVP模式在Android開發(fā)中的應(yīng)用,有興趣的可以了解一下。2016-11-11
Android GZip的使用-開發(fā)中網(wǎng)絡(luò)請求的壓縮實(shí)例詳解
這篇文章主要介紹了Android GZip的使用-開發(fā)中網(wǎng)絡(luò)請求的壓縮實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android實(shí)現(xiàn)帶有記住密碼功能的登陸界面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)帶有記住密碼功能的登陸界面,主要采用SharedPreferences來保存用戶數(shù)據(jù),感興趣的小伙伴們可以參考一下2016-05-05
Android實(shí)現(xiàn)左上角(其他邊角)傾斜的標(biāo)簽(環(huán)繞效果)效果
這篇文章主要介紹了Android實(shí)現(xiàn)左上角(其他邊角)傾斜的標(biāo)簽(環(huán)繞效果)效果,本文通過圖文實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
android基礎(chǔ)教程之開機(jī)啟動(dòng)示例
這篇文章主要介紹了android開機(jī)啟動(dòng)示例,開機(jī)自動(dòng)啟動(dòng)程序后開機(jī)啟動(dòng)廣播功能實(shí)現(xiàn),需要的朋友可以參考下2014-02-02

