循環(huán)顯示圖像的原理
<!--[endif]-->
循環(huán)顯示有些類似于循環(huán)鏈表,最后一個結(jié)點的下一個結(jié)點又是第1個結(jié)點。循環(huán)顯示圖像也可以模擬這一點。
也許細心的讀者從上一節(jié)實現(xiàn)的ImageAdapter類中會發(fā)現(xiàn)些什么。對!就是getView方法中的position參數(shù)和getCount方法的關(guān)系。position參數(shù)的值是不可能超過getCount方法返回的值的,也就是說,position參數(shù)值的范圍是0至getCount() - 1。
如果這時Gallery組件正好顯示到最后一個圖像,position參數(shù)值正好為getCount() - 1。那么我們?nèi)绾卧僮孏allery顯示下一個圖像呢?也就是說讓position參數(shù)值再增1,對!將getCount()方法的返回值也增1。
那么這里還有一個問題,如果position參數(shù)值無限地增加,就意味著resIds數(shù)組要不斷地增大,這樣會大大消耗系統(tǒng)的資源。想到這,就需要解決兩個問題:既要position不斷地增加,又讓resIds數(shù)組中保存的圖像資源ID是有限的,該怎么做呢?對于getCount()方法非常好解決,可以讓getCount方法返回一個很大的數(shù),例如,Integer.MAX_VALUE。這時position參數(shù)值就可以隨著Gallery組件的圖像不斷向前移動而增大,F(xiàn)在resIds數(shù)組只有15個元素,如果position的值超過數(shù)組邊界,要想繼續(xù)循環(huán)取得數(shù)組中的元素(也就是說,當position的值是15時,取resIds數(shù)組的第0個元素,是16時取第1個元素),最簡單的方法就是取余,代碼如下:
resIds[position % resIds.length]
在本節(jié)對ImageAdapter類做了如下兩個改進:
1. 使getCount方法返回一個很大的值。建議返回Integer.MAX_VALUE。
2. 在getView方法中通過取余來循環(huán)取得resIds數(shù)組中的圖像資源ID。
通過上面兩點改進,可以使圖像列表在向右移動時會循環(huán)顯示圖像。當然,這種方法從本質(zhì)上說只是偽循環(huán),也就是說,如果真把圖像移動到getCount方法返回的值那里,那也就顯示到最后一個圖像的。不過在這里getCount方法返回的是Integer.MAX_VALUE,這個值超過了20億,除非有人真想把圖像移動到第20億的位置,否則Gallery組件看著就是一個循環(huán)顯示圖像的組件。
本文導航
- 第1頁: 首頁
- 第2頁: 這些圖像的資源ID都保存在int數(shù)組中
- 第3頁: 循環(huán)顯示圖像的原理
- 第4頁: 實現(xiàn)循環(huán)顯示圖像的Gallery組件
- 第5頁: 本例中Main類的完整代碼