? ? ? 最近在做一個(gè)輪播圖,本來(lái)想著能夠用于公司項(xiàng)目中,可是公司竟然沒(méi)有用到漱办,自己就研究了一下~
? ? ? 可是沒(méi)想到的是,在自己的考慮之內(nèi)婉烟,換幾個(gè)可顯示的方法來(lái)看娩井,竟然出現(xiàn)了讓人意想不到的后果,難不成是自己像的太多似袁?一大段問(wèn)號(hào)......所以洞辣,我便自己在這幾天一直搜查各種資料,好吧昙衅,先從開(kāi)始慢慢講吧~
最終實(shí)現(xiàn)的效果圖扬霜,如下:
我的實(shí)現(xiàn)思路是:
1、自定義View繼承自ViewPager(這里我的ViewPager還要在繼承一個(gè)FrameLayout而涉,因?yàn)槲疫€要在ViewPager上畫(huà)指示點(diǎn)圖著瓶,就是所謂的小圓點(diǎn),所以先定義一個(gè)繼承自FrameLayout的View,在這里要addview上繼承自ViewPager的自定義View且add上小圓點(diǎn))
2啼县、在自定義view上布局材原,加入輪播控制,利用viewPager的postDelayed方法定時(shí)的更新viewpager的選中狀態(tài)
3季眷、監(jiān)聽(tīng)viewPager的addOnPageChangeListener事件余蟹,利用setSelected方法來(lái)更新小圓點(diǎn)的選中狀態(tài)
? ? ?因?yàn)槲蚁氚演啿D給繼承成一個(gè)lib,可以被大家來(lái)廣泛使用子刮,所以威酒,在自定義view上addview小圓點(diǎn)的時(shí)候,小圓點(diǎn)圖片用自定義屬性定義的,我把小圓點(diǎn)的image用setImageResource來(lái)完成的兼搏,完美實(shí)現(xiàn)了上面的效果圖卵慰。
? ? ? ?然后我就在想,咦佛呻?既然可以用setImageResource來(lái)實(shí)現(xiàn)裳朋,那么用setImageDrawable也是可以的吧?有了這么個(gè)心思吓著,馬上就行動(dòng)了鲤嫡,可是沒(méi)有想到的是,在我完成代碼绑莺,實(shí)現(xiàn)效果圖的時(shí)候暖眼,小圓點(diǎn)的選中狀態(tài)竟然不聽(tīng)使喚了...哇哇大哭...如下:
開(kāi)始了我的尋果之路...
1、我在網(wǎng)上各種搜查setImageResource和setImageDrawable的區(qū)別纺裁,給出的最佳結(jié)果是诫肠,google建議使用setImageDrawable,因?yàn)閟etImageResource是在UI線程中對(duì)圖片讀取和解析的,所以有可能對(duì)一個(gè)Activity的啟動(dòng)造成延遲....
擦...突然蒙逼了欺缘。為啥我用setImageDrawable卻不能實(shí)現(xiàn)setSelected小圓點(diǎn)的選中狀態(tài)呢累驮?
2拗军、然后,我就開(kāi)始各種懷疑控妻,難不成是我自定義屬性取到的圖片drawable取得方法不對(duì)杠输?如果不對(duì)的話瞬内,小圓點(diǎn)圖片應(yīng)該也顯示不出來(lái)啊秽澳,也試用了各種獲取圖片drawable的方法诈乒,最終無(wú)果......
3、接著剿干,我又查了各種setSelected方法的使用和實(shí)現(xiàn)輪播圖的各種方法蜂怎,都沒(méi)有用到在自定義屬性中獲取圖片,賦值后怨愤,然后更新選中狀態(tài)的....我又在想難不成派敷,就不能這么用蛹批?
3撰洗、最后,我又開(kāi)始重寫(xiě)了這個(gè)輪播圖的實(shí)現(xiàn)腐芍,沒(méi)有集成lib差导,而是直接在一個(gè)app中進(jìn)行各種查看,然后猪勇,我給小圓點(diǎn)賦值圖片的時(shí)候设褐,沒(méi)有用自定義屬性去取...而是直接賦值到小圓點(diǎn)上...最后齊刷刷的...額...setImageResource和setImageDrawable竟然都可以完好的顯示上面的效果圖....
? ? ? 我突然感覺(jué)到.哦,原來(lái)是我的取圖片的時(shí)候在自定義屬性那里,如果沒(méi)有用到setSelected方法助析,使用setImageResource和setImageDrawable是都沒(méi)有問(wèn)題的犀被,最后,但是使用setSelected方法外冀,但是都不是從自定義屬性中取圖片寡键,那就都沒(méi)問(wèn)題。最終的結(jié)果雪隧,使用setSelected方法西轩,在自定義屬性中獲取到圖片,必須使用setImageResource方法....
不知道對(duì)不對(duì)脑沿,各位大神來(lái)指正藕畔,thanks....
項(xiàng)目地址:輪播圖實(shí)現(xiàn)代碼
> 如果此篇文章對(duì)您有幫助或者您很感興趣,那么小手指別忘了點(diǎn)個(gè)贊哦庄拇!么么噠注服,謝謝關(guān)注!歡迎star 和 follow ??