当前位置: 首页 > news >正文

Android Coil总结

文章目录

  • Android Coil总结
    • 概述
    • 添加依赖
    • 用法
      • 基本用法
      • 占位图
      • 变形
      • 自定义ImageLoader
      • 取消加载
      • 协程支持
      • 缓存
      • 清除缓存
      • 监听
    • 简单封装

Android Coil总结

概述

Coil 是一个用于 Android 的 Kotlin 图像加载库,旨在简化图像加载和显示的过程。它基于 Kotlin 协程,提供了简洁的 API 和高效的性能。

添加依赖

implementation "io.coil-kt:coil:2.4.0"

用法

基本用法

// 加载网络图片
binding.imageView1.load("https://www.wanandroid.com/resources/image/pc/logo.png")

// 加载本地资源图片
binding.imageView2.load(R.drawable.logo)

// 加载本地路径图片
val file = File(cacheDir.path + "/logo.png")
binding.imageView3.load(file)

占位图

binding.imageView1.load(imgUrl) {
    crossfade(true) // 淡入淡出
    placeholder(R.drawable.placeholder) // 加载时占位
    error(R.drawable.error) // 加载失败占位
}

变形

binding.imageView1.load(imgUrl) {
    transformations(CircleCropTransformation()) // 圆形
}
binding.imageView2.load(imgUrl) {
    transformations(RoundedCornersTransformation(16F)) // 圆角
}

自定义ImageLoader

val imageLoader = ImageLoader.Builder(context).crossfade(true).build()
val request = ImageRequest.Builder(context)
    .data(imgUrl)
    .target(binding.imageView1)
    .build()
imageLoader.enqueue(request)

取消加载

val disposable = binding.imageView1.load(imgUrl)
disposable.dispose() // 取消加载

协程支持

Coil 基于 Kotlin 协程,可以协程中使用。

lifecycleScope.launch {
    val imageLoader = context.imageLoader
    val request = ImageRequest.Builder(context)
        .data(imgUrl)
        .build()
    val drawable = imageLoader.execute(request).drawable
    binding.imageView1.setImageDrawable(drawable)
}

缓存

binding.imageView1.load(imgUrl) {
    diskCachePolicy(CachePolicy.ENABLED) // 启用磁盘缓存
    memoryCachePolicy(CachePolicy.ENABLED) // 启用内存缓存
}

清除缓存

val imageLoader = context.imageLoader
imageLoader.memoryCache?.clear()
imageLoader.diskCache?.clear()

监听

binding.imageView1.load(imgUrl) {
    listener(
        onStart = { Log.e("TAG", "开始") },
        onSuccess = { request, result -> Log.e("TAG", "成功") },
        onError = { request, result -> Log.e("TAG", "失败") },
        onCancel = { Log.e("TAG", "取消") }
    )
}

简单封装

object CoilImageLoader {

    private lateinit var imageLoader: ImageLoader

    // 初始化 Coil 的 ImageLoader
    // 可以在Application中初始化
    fun init(context: Context) {
        imageLoader = ImageLoader.Builder(context)
            .crossfade(true) // 启用淡入淡出效果
            .build()
    }

    // 加载网络图片
    fun loadImage(imageView: ImageView, url: String) {
        imageView.load(url, imageLoader) {
            placeholder(R.drawable.placeholder) // 设置占位图
            error(R.drawable.error) // 设置错误图
        }
    }

    // 加载圆形图片
    fun loadCircleImage(imageView: ImageView, url: String) {
        imageView.load(url, imageLoader) {
            transformations(CircleCropTransformation()) // 圆形裁剪
        }
    }

    // 加载圆角图片
    fun loadRoundedCornersImage(imageView: ImageView, url: String, radius: Float) {
        imageView.load(url, imageLoader) {
            transformations(RoundedCornersTransformation(radius)) // 圆角
        }
    }

    // 清除内存缓存
    fun clearMemoryCache() {
        imageLoader.memoryCache?.clear()
    }

    // 清除磁盘缓存
    fun clearDiskCache(context: Context) {
        imageLoader.diskCache?.clear()
    }
}

相关文章:

  • AI是否可以实现全自动的生成内容,看看我的想法
  • 【连珠云弈】网页五子棋版项目测试报告
  • DeepSeek-R1:使用KTransformers实现高效部署指南
  • cs144 Lab Checkpoint 0: networking warmup
  • 使用 Arduino 和 Wi-Fi 控制 RGB LED
  • [MySQL初阶]MySQL(5)内置函数详解
  • 【搜索】P3654 First Step (ファーストステップ)
  • 备考六级:词汇量积累(day4)
  • 嵌入式学习L5D2-exec函数族和守护进程
  • 基于uniapp的蓝牙打印功能(佳博打印机已测试)
  • Linux 用户与组管理详解
  • 【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】
  • 算法策略深度解析与实战应用
  • 项目实战:Qt图像拼接渐进色图层生成工具v1.0.0(预设四路拼接,多路可通过多图叠层实现)
  • 再论滑动窗口与行头阻塞
  • Ai-web 1.0靶场通关攻略
  • 【HeadFirst系列之HeadFirst设计模式】第16天之生成器模式(Builder Pattern):让对象构建更优雅!
  • [力扣每日一练]关于所有不同域名的查找
  • 在命令的轨迹中:创建、删除与查看普通用户,Linux用户管理的风华与深邃
  • 嵌入式 ARM Linux 系统构成(4):设备驱动程序
  • 凤阳鼓楼瓦片脱落背后:涉事公司十年前曾因违规施工致文保建筑被烧毁
  • 欧盟拟对发往欧洲的小额包裹加收手续费,外交部回应
  • 美“金穹”反导系统增加外空作战手段,外交部:中方严重关切
  • 从马相伯到谢希德:复旦大学校长传记系列再版首发
  • 外交部副部长马朝旭会见美国新任驻华大使庞德伟
  • 王毅会见美国亚洲协会会长康京和