由"輪播圖"setImageDrawable引發的一場災難

? ? ? 最近在做一個輪播圖,本來想著能夠用于公司項目中,可是公司竟然沒有用到,自己就研究了一下~

? ? ? 可是沒想到的是,在自己的考慮之內,換幾個可顯示的方法來看,竟然出現了讓人意想不到的后果,難不成是自己像的太多?一大段問號......所以,我便自己在這幾天一直搜查各種資料,好吧,先從開始慢慢講吧~

最終實現的效果圖,如下:

我的實現思路是:

1、自定義View繼承自ViewPager(這里我的ViewPager還要在繼承一個FrameLayout,因為我還要在ViewPager上畫指示點圖,就是所謂的小圓點,所以先定義一個繼承自FrameLayout的View,在這里要addview上繼承自ViewPager的自定義View且add上小圓點)

2、在自定義view上布局,加入輪播控制,利用viewPager的postDelayed方法定時的更新viewpager的選中狀態

3、監聽viewPager的addOnPageChangeListener事件,利用setSelected方法來更新小圓點的選中狀態

? ? ?因為我想把輪播圖給繼承成一個lib,可以被大家來廣泛使用,所以,在自定義view上addview小圓點的時候,小圓點圖片用自定義屬性定義的,我把小圓點的image用setImageResource來完成的,完美實現了上面的效果圖。

? ? ? ?然后我就在想,咦?既然可以用setImageResource來實現,那么用setImageDrawable也是可以的吧?有了這么個心思,馬上就行動了,可是沒有想到的是,在我完成代碼,實現效果圖的時候,小圓點的選中狀態竟然不聽使喚了...哇哇大哭...如下:


開始了我的尋果之路...

1、我在網上各種搜查setImageResource和setImageDrawable的區別,給出的最佳結果是,google建議使用setImageDrawable,因為setImageResource是在UI線程中對圖片讀取和解析的,所以有可能對一個Activity的啟動造成延遲....

擦...突然蒙逼了。為啥我用setImageDrawable卻不能實現setSelected小圓點的選中狀態呢?

2、然后,我就開始各種懷疑,難不成是我自定義屬性取到的圖片drawable取得方法不對?如果不對的話,小圓點圖片應該也顯示不出來啊,也試用了各種獲取圖片drawable的方法,最終無果......

3、接著,我又查了各種setSelected方法的使用和實現輪播圖的各種方法,都沒有用到在自定義屬性中獲取圖片,賦值后,然后更新選中狀態的....我又在想難不成,就不能這么用?

3、最后,我又開始重寫了這個輪播圖的實現,沒有集成lib,而是直接在一個app中進行各種查看,然后,我給小圓點賦值圖片的時候,沒有用自定義屬性去取...而是直接賦值到小圓點上...最后齊刷刷的...額...setImageResource和setImageDrawable竟然都可以完好的顯示上面的效果圖....

? ? ? 我突然感覺到.哦,原來是我的取圖片的時候在自定義屬性那里,如果沒有用到setSelected方法,使用setImageResource和setImageDrawable是都沒有問題的,最后,但是使用setSelected方法,但是都不是從自定義屬性中取圖片,那就都沒問題。最終的結果,使用setSelected方法,在自定義屬性中獲取到圖片,必須使用setImageResource方法....

不知道對不對,各位大神來指正,thanks....

項目地址:輪播圖實現代碼

> 如果此篇文章對您有幫助或者您很感興趣,那么小手指別忘了點個贊哦!么么噠,謝謝關注!歡迎star 和 follow ??

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容