Glide加载图片查看报错信息

本文介绍如何使用Glide的listener方法来监听图片加载过程并处理错误情况。通过一个具体的示例展示了如何定义RequestListener并实现onLoadFailed和onResourceReady方法。

Glide为我们提供了listener()方法,加上它就能看到报错信息了,查看log:

package com.kite.imageloader;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        Toast.makeText(this, "kkk", Toast.LENGTH_SHORT).show();
                Glide.with(this).load("http://7xi8d6.com1.z0.glb.clouddn.com/16124047_121657248344062_4191645221970247680_n.jpg")
                .listener(mRequestListener)
                .into(imageView);

   RequestListener mRequestListener = new RequestListener() {
        @Override
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
            Log.d(TAG, "onException: " + e.toString()+"  model:"+model+" isFirstResource: "+isFirstResource);
            imageView.setImageResource(R.mipmap.ic_launcher);
            return false;
        }

        @Override
        public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
            Log.e(TAG,  "model:"+model+" isFirstResource: "+isFirstResource);
            return false;
        }
    };
}

Android 开发中,Glide 是一个非常流行的图片加载库,支持加载 JPEG、PNG、WebP 等静态图片,也**原生支持 GIF 动图的加载和播放**。你只需要使用 Glide 的标准 API,它会自动识别 GIF 并进行播放。 以下是如何使用 Glide 加载并显示 GIF 图片的详细说明和代码示例: --- ### ✅ 使用 Glide 加载 GIF(Kotlin 示例) #### 1. 添加依赖 首先确保你的 `app/build.gradle` 文件中添加了 Glide 依赖: ```gradle dependencies { implementation 'com.github.bumptech.glide:glide:4.16.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' } ``` > 如果使用 Kotlin,建议使用 `kapt` 替代 `annotationProcessor`: ```gradle apply plugin: 'kotlin-kapt' dependencies { implementation 'com.github.bumptech.glide:glide:4.16.0' kapt 'com.github.bumptech.glide:compiler:4.16.0' } ``` #### 2. 布局文件中使用 ImageView ```xml <ImageView android:id="@+id/imageView" android:layout_width="200dp" android:layout_height="200dp" android:scaleType="centerCrop" /> ``` > 注意:GIF 可能较大,设置合适的尺寸避免 OOM。 #### 3. 在 Activity 或 Fragment 中加载网络或本地 GIF ##### ✅ 加载网络 GIF ```kotlin import com.bumptech.glide.Glide import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import android.widget.ImageView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val imageView: ImageView = findViewById(R.id.imageView) // 网络 GIF 地址示例 val gifUrl = "https://example.com/animation.gif" Glide.with(this) .asGif() // 明确指定加载类型为 Gif .load(gifUrl) .placeholder(R.drawable.placeholder) // 可选:加载中的占位图 .error(R.drawable.error) // 可选:加载失败显示的图 .into(imageView) } } ``` ##### ✅ 加载应用内资源中的 GIF(res/drawable) 将 `test.gif` 放入 `res/drawable` 目录: ```kotlin Glide.with(this) .asGif() .load(R.drawable.test) .into(imageView) ``` ##### ✅ 加载本地存储中的 GIF(File 路径) ```kotlin val file = File("/sdcard/Pictures/anim.gif") Glide.with(this) .asGif() .load(file) .into(imageView) ``` --- ### 📌 关键点解释 - `.asGif()`:强制 Glide图片解析为 GifDrawable,确保动图播放。如果不加,Glide 可能只显示第一帧(作为静态图)。 - `.load(...)`:支持 URL、资源 ID、File、Uri 等多种数据源。 - 自动播放:Glide 默认加载后自动开始播放 GIF。 - 内存管理:Glide 会管理 GIF 的解码和内存使用,但大 GIF 仍可能引起卡顿或 OOM,注意压缩或限制大小。 --- ### ⚠️ 常见问题与解决方案 | 问题 | 解决方法 | |------|---------| | GIF 不动,只显示第一帧 | 忘记加 `.asGif()`,必须加上才能播放 | | 报错 `Failed to load resource` | 检查网络权限、URL 是否有效、文件是否存在 | | 卡顿或内存溢出 | 使用 `.override(300, 300)` 限制尺寸,或转为 WebP 动图优化 | --- ### 🔁 可选:控制 GIF 播放(暂停/恢复) 你可以获取 `GifDrawable` 来控制播放: ```kotlin Glide.with(this) .asGif() .load(gifUrl) .into(object : CustomTarget<GifDrawable>() { override fun onResourceReady(resource: GifDrawable, transition: Transition<in GifDrawable>?) { imageView.setImageDrawable(resource) // 手动控制播放 resource.start() // 自动播放 // resource.stop() // 暂停 } override fun onLoadCleared(placeholder: Drawable?) { imageView.setImageDrawable(placeholder) } }) ``` --- ### ✅ 总结 Glide 对 GIF 的支持非常完善,只需: 1. 添加依赖; 2. 使用 `.asGif()` 明确声明; 3. 提供有效的 GIF 数据源。 即可实现流畅的 GIF 加载与播放。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值