Android图片加载框架Coil,Kotlin

Android图片加载框架Coil,Kotlin

Kotlin 复制代码
implementation("io.coil-kt:coil:1.4.0")
Kotlin 复制代码
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import coil.Coil
import coil.ImageLoader
import coil.request.ImageRequest
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch


class MainActivity : AppCompatActivity() {
    companion object {
        val SIZE = 400
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.image_layout)
        val imageView = findViewById<ImageView>(R.id.image)

        val ctx = this.applicationContext

        val mImageLoader = ImageLoader.Builder(ctx).build()
        Coil.setImageLoader(mImageLoader)

        val request = ImageRequest.Builder(ctx)
            .size(SIZE)
            .data(R.mipmap.p)
            .target(imageView)
            .build()

        lifecycleScope.launch(Dispatchers.IO) {
            Coil.execute(request)
        }
    }
}

或者:

Kotlin 复制代码
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import coil.Coil
import coil.ImageLoader
import coil.request.ImageRequest
import coil.target.Target
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch


class MainActivity : AppCompatActivity() {
    companion object {
        val SIZE = 400
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.image_layout)
        val imageView = findViewById<ImageView>(R.id.image)

        val ctx = this.applicationContext

        val mImageLoader = ImageLoader.Builder(ctx).build()
        Coil.setImageLoader(mImageLoader)

        val request = ImageRequest.Builder(ctx)
            .size(SIZE)
            .data(R.mipmap.p)
            .target(object : Target {
                override fun onStart(placeholder: Drawable?) {
                    super.onStart(placeholder)
                    Log.d("fly", "onStart")
                }

                override fun onSuccess(result: Drawable) {
                    super.onSuccess(result)

                    Log.d("fly", "onSuccess")
                    imageView.setImageDrawable(result)
                }
            })
            .build()

        lifecycleScope.launch(Dispatchers.IO) {
            Coil.execute(request)
        }
    }
}

Coil是专门针对Android平台上的Kotlin语言特性设计,这不像Glide,Glide的核心框架语言是Java。Coil实现看更细颗粒度的内存、磁盘缓存的客制化设置。

相关推荐
非典型Android程序员4 小时前
Launcher学习总结
android
Coffeeee4 小时前
Android功耗优化,哪些代码会让你的机子发热又耗电
android·架构·kotlin
Android打工仔4 小时前
Kotlin 编译器是如何把 suspend 函数变成状态机的?
kotlin
Android打工仔4 小时前
一个 suspend 函数,为什么会变成一个普通函数?
kotlin
xianrenli386 小时前
Android14自动时区更新
android·学习·framework·aosp14·自动时区
心中有国也有家6 小时前
AtomGit Flutter 鸿蒙客户端:零外部资源的应用打包策略
android·javascript·flutter·华为·harmonyos
恋猫de小郭6 小时前
Fluter 共享内存多线程正在落地,IsolateGroupBound 来了
android·前端·flutter
三少爷的鞋6 小时前
Kotlin 协程的七重境界:从 launch(IO) 到执行模型设计
android
-SOLO-16 小时前
Android Event 日志完全指南
android
壮哥_icon17 小时前
【Android 系统开发】从掉帧卡顿到丝滑:高频硬件中断(IRQ)的 CPU 亲和性性能优化实战
android·性能优化