摘要:但是當我們需要更換圖片加載庫時,卻發現這是一項艱巨的任務。高斯模糊效果是一個很耗性能的一個操作,很容易引起,所以在使用時應將盡可能的縮小,同時選擇一個穩定的實現方式。
在APP開發過程,圖片加載是一個不可或缺的模塊,一般我們都會使用比較成熟的開源庫,如Fresco, ImageLoader, Glide等。 這些開源庫也都提供了簡潔的使用方式,使我們可以快速完成圖片的加載過程。但是當我們需要更換圖片加載庫時,卻發現這是一項艱巨的任務。
目標為了減小更換圖片加載庫的的工作量,我們需要降低圖片加載庫的耦合度,通過封裝的形式為應用提供統一的使用接口。
本次封裝僅包含圖片加載庫的基本功能:初始化圖片加載庫
顯示圖片(圓角,圓形等樣式)
下載圖片
從結構圖中我們可以看出,更換圖片加載庫只需要設置相應的mLoaderInstance即可。
使用ImageLoaderManager.getInstance().init(getApplicationContext(), new FrescoInstance()); ImageLoaderManager.getInstance().displayImage("http://t.cn/RTRKzUt", image);說明
ImageLoaderManager提供了統一的接口,至于初始化中怎樣配置,只需要在相應的Instance中去實現即可;
如需要封裝其他的圖片加載庫,如Picasso, 只需要實現ImageLoaderInstance接口即可;
圖片加載庫在加載圖片時都提供了配置項,如設置占位圖,失敗圖,邊框等。這些與View相關的配置是以自定義View的形式實現的;
由于Fresco加載的目標是SimpleDraweeView,其他的圖片加載庫為ImageView, 為了提供統一的目標對象,我們使用繼承自GenericDraweeView(SimpleDraweeView的父類)的WrapImage作為加載目標。如果你不需要封裝Fresco, 那么可將WrapImageView的父類改成ImageView;
項目中提供了高斯模糊的幾種實現方案:Fresco自帶,FastBlur算法,RenderScript。具體的效果可運行項目進行查看。說一下這幾種方案使用過程中的感受:
項目地址Fresco提供的高斯模糊效果算是這3種方案中最好的,穩定,顯示效果細膩;
FastBlur算法,雖然可通過縮放Bitmap來提高轉換效率,但顯示效果不如Fresco;
RenderScript雖然是Android提供的,但是使用體驗并不好,在ImageLoader中使用,模糊效果顯示異常。在Glide中使用時,對Bitmap縮放后模糊效果顯示異常。同時由于有些廠商對這一功能進行了閹割,使用時需要添加so庫,為了版本的兼容性,還需要引入v8的兼容包。
高斯模糊效果是一個很耗性能的一個操作,很容易引起OOM,所以在使用時應將Bitmap盡可能的縮小,同時選擇一個穩定的實現方式。
ImageloaderManager
總結此項目旨在介紹這種封裝的思想,至于細節方面就交給各位小伙伴了,畢竟很少有APP會同時使用多個圖片加載庫。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70900.html
閱讀 1308·2023-04-26 01:03
閱讀 1942·2021-11-23 09:51
閱讀 3311·2021-11-22 15:24
閱讀 2672·2021-09-22 15:18
閱讀 1018·2019-08-30 15:55
閱讀 3487·2019-08-30 15:54
閱讀 2257·2019-08-30 15:53
閱讀 2398·2019-08-30 15:44