打造Android一體化輪播廣告條

2021-07-09 05:36:04 字數 3990 閱讀 5903

在文章打造android一體式輪播廣告條中,我們已經學習了打造android一體式輪播廣告條的製作,在上篇文章中我們已經通過一種方法實現了廣告條的無線迴圈。主要做的目的就是讓viewpager和指示器進行封裝,方便我們使用,不需要多次進行指示器的控制。看過最後的效果圖我們發現上篇的原理中,從最後一張圖切換到第一張的時候,效果顯得很突兀。所以我們嘗試使用第二種思路進行。

第二種思路:通過給pagecount設定乙個很大的數,來回實現效果。我們先來看看我們實現的原理:

根據上圖,就是利用切換的迴圈倒置。讓viewpager走不到盡頭,所以就實現了一種「假」迴圈的現象。本次的開發還是以上篇部落格中的**為基礎進行開發,只在實現原理的位置進行了修改。

在這次的原理中,我們新增了兩個成員變數:

/**

* 設定的總迴圈個數

*/private

int pagecount;

/*** 設定的總頁面數

*/private

int numberpages;

這兩個用於記錄我們的頁面資訊,通常我們會設定乙個很大的數作為總迴圈個數,但是注意,總迴圈數要是總頁面的整數倍,不然迴圈判斷的邏輯就要修改,所以此處,我也不指定,我直接賦值為總頁面數的二倍。見**:

/**

*@param imageurls

*/public

void

addimageurls(listimageurls)

看過上篇文章的朋友會發現,我們上篇文章中是傳入url位址,直接在內部進行載入,這次由於在內部迴圈,會導致viewpager內部快取的imageview與需要新增的重複,導致報錯(乙個imageview已經屬於乙個container,需要進行刪除)。所以為了方便,我將引數改為了bitmap,然後在內部進行生成imageview。

@override

public object instantiateitem(viewgroup container, int position)

}});

container.addview(imageview);

return imageview;

}

這次的切換邏輯不是在onpageselected中進行處理,而是在finishupdate中進行切換。

@override

public

void

finishupdate(viewgroup container) else

if(location == 0)

}其次一點就是通過handler傳送訊息實現迴圈的處理。

private handler mhandler = new handler() else

mhandler.sendemptymessagedelayed(0, 3000);}};

至此,基本的邏輯都已經實現完成。具體的**就不貼了。相比較上篇介紹的,我們這次又新增了幾個自定義屬性,

name="indicatorbigsize"

format="dimension"/>

name="indicatorbackgroud"

format="reference"/>

name="indicatormarginbottom"

format="dimension"/>

我們介紹乙個使用例項,看下布局檔案:

""

xmlns:tools=""

xmlns:viewpager=""

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.lcwang.androidviews.mainactivity" >

.lcwang

.androidviews

.viewpagerbarnner

android:id="@+id/viewpager"

android:layout_height="160dp"

android:layout_width="match_parent"

viewpager:indicatorsize="8dp"

viewpager:indicatorinterval="10dp"

viewpager:containerheight="15dp"

viewpager:indicatormarginbottom="0dp"

viewpager:indicatorbackgroud="@drawable/head_sbox"

viewpager:indicatordrawable="@drawable/indicator_backgroud"

/>

.lcwang

.androidviews

.first

.viewpagerbarnner

android:id="@+id/viewpagerfirst"

android:layout_height="160dp"

android:layout_width="match_parent"

android:layout_margintop="20dp"

viewpager:indicatorsize="8dp"

viewpager:indicatorinterval="10dp"

viewpager:containerheight="15dp"

viewpager:indicatorbackgroud="@drawable/head_sbox"

viewpager:indicatormarginbottom="0dp"

viewpager:indicatordrawable="@drawable/indicator_backgroud"

/>

mainactivity中的邏輯:

public class mainactivity extends activity 

});urlstring = new arraylist();

urlstring.add("drawable://" + r.drawable

.first);

urlstring.add("drawable://" + r.drawable

.second);

urlstring.add("drawable://" + r.drawable

.third);

urlstring.add("drawable://" + r.drawable

.four);

urlstring.add("drawable://" + r.drawable

.five);

urlstring.add("drawable://" + r.drawable

.six);

viewpagerbarnner1.addimageurls(urlstring);

viewpagerbarnner1.setviewpagerclick(new com

.lcwang

.androidviews

.first

.viewpagerbarnner

.viewpagerclick()

});}

}

這樣就算完成了,看下效果圖:

後期想擼一viewpager的庫,所以暫時不放出**碼了。

github原始碼

前向一體化 後向一體化 縱向一體化的含義

前向一體化就是企業通過收購或兼併若干商業企業,或者擁有和控制其分銷系統,實行產銷一體化。前向一體化是指獲得分銷商或零售商的所有權或加強對它們的控制,也就是指企業根據市場的需要和生產技術的可能條件,利用自己的優勢,把成品進行深加工的戰略。在生產過程中,物流從順方向移動,稱為前向一體化,採用這種戰略,是...

狀態列一體化

效果圖方法實現 1新增布局屬性 首先要在布局檔案中加入下面兩個屬性 android cliptopadding true android fitssystemwindows true 解釋一下上面兩個布局屬性的意思 android cliptopadding 定義布局間是否有間距 android f...

運維開發一體化

開發者中心為開者提供了資源管理 持續整合 持續交付 容器服務 映象倉庫等應用基礎服務,同時為應用的微服務架構落地提供完備的支撐,結合devops的理念,通過提供自動化運維 日誌管理 中介軟體服務等功能,幫助開發及運維人員降低產品研發迭代過程中的負擔。1.資源管理 以資源池的方式進行計算節點管理,自由...