天天看点

Android 日常封装之暴力ImageLoader图片加载

/**
 * @author Created by qlang on 2017/9/7.
 */

public class ImageLoader {

    public interface BitmapListener {
        void onCall(Bitmap bitmap);
    }

    public static <T extends ImageView> void loadImg(Context context, String id, byte[] bytes, T imageView) {
        if (null == imageView) return;

        Glide.with(context).load(bytes, id)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .into(imageView);
    }

    public static <T extends ImageView> void loadImg(Context context, String url, T imageView) {
        Glide.with(context).load(url)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .dontAnimate()
                .into(imageView);
    }

    public static <T extends ImageView> void loadImg(Context context, String url, T imageView, int defaultImageResId, int errImageResId) {
        Glide.with(context).load(url)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .placeholder(defaultImageResId)
                .error(errImageResId)
                .crossFade()
                .into(imageView);
    }

    public static void loadImg(Context context, String url, final BitmapListener listener) {
        Glide.with(context).load(url)
                .asBitmap()
                .format(DecodeFormat.PREFER_ARGB_8888)
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(new SimpleTarget<Bitmap>() {

                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        if (null != listener) listener.onCall(resource);
                    }
                });
    }
}      

kotlin版

/**
 * @author Created by qlang on 2017/7/19.
 */
class ImageLoader {

    interface BitmapListener {
        fun onCall(bitmap: Bitmap?)
    }

    companion object {
        fun <T : ImageView> loadImg(context: Context, id: String, bytes: ByteArray, imageView: T?) {
            if (null == imageView) return

            Glide.with(context).load(bytes, id)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .dontAnimate()
                    .into(imageView)
        }

        fun <T : ImageView> loadImg(context: Context, url: String, imageView: T?) {
            loadImg(context, url, imageView, R.mipmap.ic_default_img, R.mipmap.ic_default_img)
        }

        fun <T : ImageView> loadBigImg(context: Context, url: String, imageView: T?) {
            imageView ?: return

            Glide.with(context).load(url)
                    .asBitmap()
                    .format(DecodeFormat.PREFER_ARGB_8888)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .placeholder(R.mipmap.ic_default_img)
                    .error(R.mipmap.ic_default_img)
                    .into(imageView)
        }

        fun <T : ImageView> loadImg(context: Context, url: String, imageView: T?, defaultImageResId: Int, errImageResId: Int) {
            imageView ?: return

            Glide.with(context).load(url)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .placeholder(defaultImageResId)
                    .error(errImageResId)
//                    .dontAnimate()
                    .crossFade().into(imageView)
        }

        fun loadImg(context: Context, url: String, listener: (Bitmap?) -> Unit) {
            Glide.with(context).load(url)
                    .asBitmap()
                    .format(DecodeFormat.PREFER_ARGB_8888)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(object : SimpleTarget<Bitmap>() {
                        override fun onResourceReady(resource: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
                            listener(resource)
                        }
                    })
        }

        fun loadImg(context: Context, url: String, listener: BitmapListener?) {
            Glide.with(context).load(url)
                    .asBitmap()
                    .format(DecodeFormat.PREFER_ARGB_8888)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(object : SimpleTarget<Bitmap>() {
                        override fun onResourceReady(resource: Bitmap?, glideAnimation: GlideAnimation<in Bitmap>?) {
                            listener?.onCall(resource)
                        }
                    })
        }
    }
}

fun ImageView.loadImg(url: String, defImgId: Int = R.mipmap.ic_default_img, errImgId: Int = R.mipmap.ic_default_img)
        = ImageLoader.loadImg(this.context, url, this, defImgId, errImgId)

fun ImageView.loadImg(id: String, bytes: ByteArray) = ImageLoader.loadImg(this.context, id, bytes, this)

fun ImageView.loadImg(block: () -> Bitmap?) = this.setImageBitmap(block())
      

继续阅读