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