官方学习地址
https://developer.android.google.cn/kotlin
学完基本的语法,就可以将kotlin运用写android应用了中。官方的资料没有对kotlin在android应用中使用做太多的讲解。
学习任何一门新的语言都需要花费时间去练习。只要掌握了基本的语法就可以边做项目边学习。单纯地看语法也是容易忘的。在项目中将学到的东西运用起来,直到熟练。
kotlin实现可以替换图片加载框架的替换
ImageLoader,Picasso,Glide是android中常用到的3种图片加载框架。我现在使用的是Glide。
如果要是用其中的一种,在你项目的gradle文件中添加相应的依赖地址就可以了。
需求
随意切换图片加载框架。在改变最少代码的情况,将图片的加载方式替换掉。
为什么想随意切换
随着技术的不断发展,也许你今天用的框架不再流行。你需要更换另一种更高效、更流行的框架。如果之前没有对这个框架进行封装。现在修改的话就是在你使用的地方去修改。那如果在项目中多处用到呢?那不是要改动很大。
程序后期的维护,如果不是因为bug要修改之前的代码。是不建议随意修改代码的。后期的维护最好能做到增加而不是修改。
怎么做到随意切换呢
如果要做到修改的代码比较少,那我们的图片加载框架就要放在应用层代码中,相对底层的位置。也就是,我们的调用者不关心你的底层实现,只关心你的代码实现结果。这个时候,考虑用java的多态实现。
创建图片加载的共同接口
这里只对网络图片进行处理。网络图片需要的url,ImageView。输入是url输出展示通过ImageView。
/**
* @description: 一个图片加载的接口
* @author Stone
* @version V1.0
* @email redsstone@163.com
*/
interface IimageLoadManager {
fun display(context: Context, imageView: ImageView, url: String, progressId: Int,errorId: Int, tag: Any)
fun display(context: Context, imageView: ImageView, url: String, progressId: Int,errorId: Int)
fun display(context: Context, imageView: ImageView, url: String, progressId: Int)
fun display(context: Context, imageView: ImageView, url: String)
fun display(context: Context, imageView: ImageView, uri: Uri)
}
加载图片的工具类
/**
* @description: 加载图片的工具
* @author Stone
* @version V1.0
* @email redsstone@163.com
*/
class LoadImageHelper: IimageLoadManager{
var manager: IimageLoadManager = GlideManager()
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int, errorId: Int, tag: Any) {
manager.display(context, imageView, url, progressId, errorId, tag)
}
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int, errorId: Int) {
manager.display(context, imageView, url, progressId, errorId)
}
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int) {
manager.display(context, imageView, url, progressId)
}
override fun display(context: Context, imageView: ImageView, url: String) {
manager.display(context, imageView, url)
}
override fun display(context: Context, imageView: ImageView, uri: Uri) {
manager.display(context, imageView, uri)
}
}
Glide图片加载
不同的图片加载框架都需实现IimageLoadManager
/**
* @description: Glide图片加载
* @author Stone
* @date 1/9/19 22:24
* @version V1.0
* @email redsstone@163.com
*/
internal class GlideManager : IimageLoadManager{
private var requestOptions: RequestOptions = RequestOptions()
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int, errorId: Int, tag: Any) {
requestOptions = requestOptions.error(errorId).placeholder(progressId)
display(context, imageView, url, requestOptions)
}
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int, errorId: Int) {
requestOptions = requestOptions.error(errorId).placeholder(progressId)
display(context, imageView, url, requestOptions)
}
override fun display(context: Context, imageView: ImageView, url: String, progressId: Int) {
requestOptions = requestOptions.placeholder(progressId)
display(context, imageView, url, requestOptions)
}
/**
* 默认显示图片
*/
override fun display(context: Context, imageView: ImageView, url: String) {
Glide.with(context)
.load(url)
.apply(requestOptions)
.into(imageView)
}
/**
* 显示图片
*/
private fun display(context: Context, imageView: ImageView, url: String, requestOptions: RequestOptions) {
Glide.with(context)
.load(url)
.apply(requestOptions)
.into(imageView)
}
override fun display(context: Context, imageView: ImageView, uri: Uri) {
}
fun isSetOptions(): Boolean {
if (requestOptions == null) {
return false
}
return true
}
}
使用图片加载
fun main(args: Array<String>) {
// 初始化化加载工具
val loadImageHelper = LoadImageHelper()
// 设置加载图片的框架,这个位置就替换不同的框架
loadImageHelper.manager = GlideManager()
// 加载图片
loadImageHelper.display()
}
扫描关注吧