Kotlin4-Kotlin在android的应用

官方学习地址

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()
}

扫描关注吧

202f18e00a40e732839bb8d731a53dee.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值