繼承控件是咱們Android開發中最重要也是最常使用的控件,它不一樣於自繪控件和組合控件,它不須要咱們本身去從新去實現一個控件。面向對象的一個重要特性就是繼承,相信各位同窗對繼承的瞭解都已經很是深刻了,繼承控件理所固然會擁有父類的全部特性。咱們去實現一個繼承控件的緣由,每每是原生控件已經知足不了咱們的業務需求,須要咱們本身去對原生控件進行定製化的功能擴展。git
固然,繼承控件的實現目的多種多樣,下面舉幾個常見的例子。好比實現仿IOS平臺的具備回彈特性的ScrollView,好比實現嵌套在ScrollView中的ListView,再好比有這麼一個需求,顯示用戶的圓形頭像等等。考慮到今天這一講的內容的複雜性,同時爲了能更詳盡的理解繼承控件的思想,我已經提早寫了一個比較通用的網絡加載圖片的類庫來幫助你們理解。你們能夠在文章的最後看到Github的代碼連接,歡迎fork。下面先簡單介紹下這個控件。github
SmartImageView是ImageView的直接子類,擁有ImageView的全部特性,同時擴展了加載網絡圖片的方法。經過SmartImageView能夠實現如下的功能。自定義屬性方便的設置加載中、加載失敗的圖片;加載圖片成功後,能夠把圖片緩存到內存和本地,避免下次再次訪問網絡,加快了速度;啓用線程池去加載網絡圖片,避免開啓過多的線程;使用SoftReference去緩存圖片,防止內存溢出;最後就是具體的加載實現都是基於接口的,方便使用者的擴展。好了,老王賣瓜也賣完了,言歸正傳。簡單介紹下實現的思路和用法。緩存
1、SmartImage以及實現類WebImage,貼出關鍵代碼微信
2、設置自定義屬性網絡
3、聲明SmartImageView的成員變量佈局
4、初始化自定義屬性spa
5、定義並實現網絡加載功能,貼出關鍵代碼.net
6、佈局使用線程
7、代碼使用orm
寫在最後,代碼精簡了再精簡,但仍是蠻多的,只能貼出關鍵代碼,可是大致的實現思路已經體現出來了。全部的代碼我都放在了Github上了,歡迎Pull Request。
地址:https://github.com/JackCho/SmartImageView
若是以爲對你有所幫助,歡迎你們訂閱個人微信公衆帳號——Android乾貨分享。下面是微信的二維碼,爲你提供及時高質的Android乾貨。