Android Picasso分析

Picasso是Square公司開(kāi)源的一個(gè)Android平臺(tái)上的圖片加載框架

picasso1.png

核心類:

Picasso:負(fù)責(zé)圖片下載、變換、緩存的管理器,當(dāng)它收到一個(gè)圖片下載請(qǐng)求的時(shí)候,它會(huì)創(chuàng)建Request并提交給Dispatcher

Dispatcher: Dispatcher會(huì)尋找對(duì)應(yīng)的處理器RequestHandler,并將請(qǐng)求與該處理器一起提交給線程池執(zhí)行

Picasso-classes-relation.png

圖片加載步驟:

創(chuàng)建 -> 入隊(duì) -> 執(zhí)行 -> 解碼 -> 變化 -> 批處理 -> 完成 -> 分發(fā) -> 顯示

使用

Picasso.get().load(url).into(first_img)
  
//加載一張圖片 旋轉(zhuǎn)45°
Picasso.get()
        .load(URL)
        .rotate(45f)
        .placeholder(R.drawable.placeholder_disk)
        .into(imgOne);

//加載一張圖片并設(shè)置一個(gè)回調(diào)接口
Picasso.get()
        .load(URL)
        .placeholder(R.drawable.placeholder_disk)
        .into(imgOne, new Callback() {

            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(Exception e) {

            }
        });

//預(yù)加載一張圖片
Picasso.get().load(URL).fetch();

//同步加載一張圖片,注意只能在子線程中調(diào)用并且Bitmap不會(huì)被緩存到內(nèi)存里.
new Thread() {
    @Override
    public void run() {
        try {
            final Bitmap bitmap = Picasso.get().load(URL).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}.start();

//加載一張圖片旋轉(zhuǎn)并且添加一個(gè)Transformation,可以對(duì)圖片進(jìn)行各種變化處理,例如圓形頭像.
Picasso.get().load("url").rotate(10).transform(new Transformation() {
    @Override
    public Bitmap transform(Bitmap source) {
        //處理Bitmap
        return null;
    }

    @Override
    public String key() {
        return null;
    }
}).into(imgTwo);

//加載一張圖片并按照指定尺寸以centerInside()的形式縮放.并設(shè)置加載的優(yōu)先級(jí)為高.注意centerInside()或centerCrop()
//只能同時(shí)使用一種,而且必須指定resize()或者resizeDimen();
Picasso.get().load(URL)
        .resize(400, 400)
        .centerInside()
        .priority(Picasso.Priority.HIGH)
        .into(imgTwo);

//加載一張圖片并設(shè)置tag,可以通過(guò)tag來(lái)暫定或者繼續(xù)加載,可以用于當(dāng)ListView滾動(dòng)是暫定加載.停止?jié)L動(dòng)恢復(fù)加載.
Picasso.get().load(URL).tag(getContext()).into(imgTwo);
Picasso.get().pauseTag(getContext());
Picasso.get().resumeTag(getContext());
  

參考:

https://blog.csdn.net/chdjj/article/details/49964901

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

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