首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android ImageLoader 異步載入圖片:如何監聽載入完成事件

     編輯:程式設計綜合問答

核心答案

Universal Image Loader (UIL) 提供 ImageLoadingListener 介面,四個回調方法覆蓋完整生命週期:

  • onLoadingStarted:開始載入,可顯示進度條或佔位圖。
  • onLoadingFailed:載入失敗,可重試或顯示錯誤圖。
  • onLoadingComplete:載入成功並完成 Bitmap 繪製,此處可隱藏進度條、顯示版面、啟動動畫等。
  • onLoadingCancelled:任務取消(如快速滑動列表)。

標準使用範例

ImageLoader.getInstance().displayImage(
    imageUri,
    imageView,
    displayOptions,           // 可選:DisplayImageOptions 設定佔位圖、圓角、快取策略
    new ImageLoadingListener() {
        @Override public void onLoadingStarted(String uri, View view) {
            progressBar.setVisibility(View.VISIBLE);
        }
        @Override public void onLoadingFailed(String uri, View view, FailReason reason) {
            progressBar.setVisibility(View.GONE);
            imageView.setImageResource(R.drawable.ic_error);
        }
        @Override public void onLoadingComplete(String uri, View view, Bitmap bitmap) {
            progressBar.setVisibility(View.GONE);
            // 這裡可安全操作 bitmap 或通知版面顯示
            containerLayout.setVisibility(View.VISIBLE);
        }
        @Override public void onLoadingCancelled(String uri, View view) {
            progressBar.setVisibility(View.GONE);
        }
    },
    new ImageLoadingProgressListener() { // 可選:進度回調
        @Override public void onProgressUpdate(String uri, View view, int current, int total) {
            progressBar.setProgress((int)(100f * current / total));
        }
    }
);

進階技巧

  1. 只想知道完成、不想寫匿名類別:使用 SimpleImageLoadingListener 適配器,僅覆寫需要的方法。
  2. 配合 ListView/RecyclerView:在 onLoadingComplete 中呼叫 adapter.notifyDataSetChanged() 會導致閃爍,建議僅更新單一 ViewHolder。
  3. 快取命中時:若圖片來自記憶體快取,onLoadingStarted 不會觸發,直接進入 onLoadingComplete,邏輯需兼容此情況。

遷移建議

UIL 官方已停止維護(最後更新 2017),新專案建議改用 Glide、Picasso 或 Coil (Kotlin 協程優先),它們同樣提供 Target / RequestListener 等同等回調機制,且支援現代 Android 架構(Lifecycle、RequestManager 等)。

結語

使用 ImageLoadingListener 即可精確掌控 ImageLoader 異步載入的每個階段,滿足「載入完成再顯示版面」等業務需求;長期維護專案請考慮遷移至活躍維護的圖片庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved