使用HttpURLConnection同步获取Bitmap,当然还有异步、Glide等方式
var bitmap: Bitmap?
var imageURL: URL? = null
try {
imageURL = URL(url)
} catch (e: MalformedURLException) {
e.printStackTrace()
}
thread {
try {
val conn: HttpURLConnection = imageURL?.openConnection() as HttpURLConnection
conn.doInput = true
conn.connect()
val `is`: InputStream = conn.inputStream
bitmap = BitmapFactory.decodeStream(`is`)
Handler(Looper.getMainLooper()).post {
listener.bitmapLoadSuccess(bitmap)
}
`is`.close()
} catch (e: Exception) {
e.printStackTrace()
}
}
使用协程+Coil图片库
package com.community.mobile.utils
import android.content.Context
import android.graphics.Bitmap
import androidx.core.graphics.drawable.toBitmap
import coil.imageLoader
import coil.request.ImageRequest
import com.safframework.log.L
import kotlinx.coroutines.*
class ImageUtils{
companion object{
fun getBitmap(context: Context, url: String?, listener: BitmapLoadListener) {
val request = ImageRequest.Builder(context)
.data(url)
.build()
GlobalScope.launch(Dispatchers.Main) {
val drawable = context.imageLoader.execute(request).drawable
L.d("ImageUtils", Thread.currentThread().name)
listener.bitmapLoadSuccess(drawable?.toBitmap(500, 500))
}
}
}
interface BitmapLoadListener{
fun bitmapLoadSuccess(bitmap: Bitmap?)
}
}
- 发现代码还是挺少的 主要是线程切换一行代码就实现了