實現(xiàn)微信圖片加載顯示進度的效果-LoadingProgress

分析

從網(wǎng)絡上加載圖片是一種耗時的操作,當加載的圖片體積越大,消耗的時間也會更長。向ImageView添加一個進度條的話,可以起到一定的效果。而在我們Android里面,據(jù)我了解,想實現(xiàn)ImageView添加進度條的方法有兩種:
1.新建一個類extends ImageView,在draw()方法里面畫進度。
2.可以在你的ImageView外圍添加RelativeLayout,然后,在里面加多一個ProgressBar。

LoadingProgress用的都不是以上兩種方法。而是采用了extends Drawable的形式,然后注入到ImageView圖層上面。

對比

先從上面第二種來說,在外圍嵌套RelativeLayout再放多一個ProgressBar,如果在ListView里面這樣來寫的話,性能絕對會受到影響,因為多繪制兩個控件,Android就要多點耗時時間,內(nèi)存也會占用。
第一種和我的那種對比的話,我的那種可能會相對占用一點內(nèi)存,但是相對的,靈活性和擴展性就高了,為什么這樣說呢?比如,你有時候需要用到手勢縮放這種Extends ImageView的控件,總不可能繼承與手勢縮放,再重新封裝代碼對吧?
我的只要是繼承于ImageView和可以監(jiān)聽到下載圖片進度的回調(diào),都可以實現(xiàn)像QQ和微信那種加載進度條,可以動態(tài)的調(diào)整圓環(huán)大小和字體大小,顏色和其他的。

附上效果圖

這里寫圖片描述

用法

    //用法也是挺簡單的,只需要幾行代碼
    CircleProgress progress = new CircleProgress.Builder()
    
    // .....從建造者里面設置你的屬性,園底層顏色,進度顏色,字體大小顏色等..
                        .build();//返回CircleProgress


    /**********
    * 如果你不想圓形進度條,你可以使用其他的進度條
    * 比如:RectangleProgress(長形進度條)
    * RotateProgress(實現(xiàn)自動旋轉(zhuǎn)的進度條)
    * LevelProgress(這個我也不好解析,類似效果圖水杯的那種效果)
    */
    //對于使用Fresco框架的
    progress.injectFresco(target);//SimpledraweeView
    //除了Fresco框架其他的,均使用這個方法
    progress.inject(target);//target為你的ImageView
    //接著加載你的圖片把

</t></t>最后,你需要監(jiān)聽到圖片下載進度變化的事件,Fresco框架的不需要。

在你的進度回調(diào)方法里面:

    @Override
    public void update(long current,long total){
        //當前進度值
        progress.setLevel((int)current);
        //最大進度值
        progress.setMaxValue(total);
    }

對于使用Glide和Picasso框架的人來說,獲取進度變化的回調(diào)可能會有點困難,不過可參考我的DEMO,使用Okhttp3攔截進度事件,不過也有點問題,特別大的圖片加載不出來,我也不太了解OKhttp3進度獲取,希望有人能指點一下我!

Github

https://github.com/peng8350/LoadingProgress
歡迎大家來star一下我,我是第一次寫開源項目,難免會有一些問題,希望大家可以提出來!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容