From cf46e410485ef421f7a36d2855464a41151caa39 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:37:24 +0800 Subject: [PATCH 01/10] Create glide --- src/main/java/com/corelibs/glide | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/main/java/com/corelibs/glide diff --git a/src/main/java/com/corelibs/glide b/src/main/java/com/corelibs/glide new file mode 100644 index 0000000..50719de --- /dev/null +++ b/src/main/java/com/corelibs/glide @@ -0,0 +1 @@ +处理Glide网络加载无证书的https协议图片 From fa62beb1cf9feeb4cc94abc1e4b110f8e545ea54 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:38:38 +0800 Subject: [PATCH 02/10] Delete glide --- src/main/java/com/corelibs/glide | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/main/java/com/corelibs/glide diff --git a/src/main/java/com/corelibs/glide b/src/main/java/com/corelibs/glide deleted file mode 100644 index 50719de..0000000 --- a/src/main/java/com/corelibs/glide +++ /dev/null @@ -1 +0,0 @@ -处理Glide网络加载无证书的https协议图片 From 00070e799dd9dbea6aff6ac6a1cbbb9abb56f914 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:51:30 +0800 Subject: [PATCH 03/10] Create OkHttpUrlLoader.java --- .../com/corelibs/glide/OkHttpUrlLoader.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/OkHttpUrlLoader.java diff --git a/src/main/java/com/corelibs/glide/OkHttpUrlLoader.java b/src/main/java/com/corelibs/glide/OkHttpUrlLoader.java new file mode 100644 index 0000000..6acd664 --- /dev/null +++ b/src/main/java/com/corelibs/glide/OkHttpUrlLoader.java @@ -0,0 +1,77 @@ +import android.content.Context; + +import com.bumptech.glide.load.data.DataFetcher; +import com.bumptech.glide.load.model.GenericLoaderFactory; +import com.bumptech.glide.load.model.GlideUrl; +import com.bumptech.glide.load.model.ModelLoader; +import com.bumptech.glide.load.model.ModelLoaderFactory; + +import java.io.InputStream; + +import okhttp3.OkHttpClient; + +/** + * Author: yangdm + * Email:yangdm@bluemobi.cn + * Description:(加载OKHttpClient) + */ + + +public class OkHttpUrlLoader implements ModelLoader { + + /** + * The default factory for {@link OkHttpUrlLoader}s. + */ + public static class Factory implements ModelLoaderFactory { + private static volatile OkHttpClient internalClient; + private OkHttpClient client; + + //在这里返回忽略网络证书的OKHttpClient + + private static OkHttpClient getInternalClient() { + if (internalClient == null) { + synchronized (Factory.class) { + if (internalClient == null) { + internalClient = IgnoreCertificateOkHttpClient.getOkHttpsClient(); + } + } + } + return internalClient; + } + + /** + * Constructor for a new Factory that runs requests using a static singleton client. + */ + public Factory() { + this(getInternalClient()); + } + + /** + * Constructor for a new Factory that runs requests using given client. + */ + public Factory(OkHttpClient client) { + this.client = client; + } + + @Override + public ModelLoader build(Context context, GenericLoaderFactory factories) { + return new OkHttpUrlLoader(client); + } + + @Override + public void teardown() { + // Do nothing, this instance doesn't own the client. + } + } + + private final OkHttpClient client; + + public OkHttpUrlLoader(OkHttpClient client) { + this.client = client; + } + + @Override + public DataFetcher getResourceFetcher(GlideUrl model, int width, int height) { + return new OkHttpStreamFetcher(client, model); + } +} From 59cdd2c21a942d676644fdc63df187cf60746104 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:52:48 +0800 Subject: [PATCH 04/10] Create OkHttpStreamFetcher --- .../com/corelibs/glide/OkHttpStreamFetcher | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/OkHttpStreamFetcher diff --git a/src/main/java/com/corelibs/glide/OkHttpStreamFetcher b/src/main/java/com/corelibs/glide/OkHttpStreamFetcher new file mode 100644 index 0000000..8210438 --- /dev/null +++ b/src/main/java/com/corelibs/glide/OkHttpStreamFetcher @@ -0,0 +1,82 @@ +import com.bumptech.glide.Priority; +import com.bumptech.glide.load.data.DataFetcher; +import com.bumptech.glide.load.model.GlideUrl; +import com.bumptech.glide.util.ContentLengthInputStream; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; + +/** + * Author: yangdm + * Email:yangdm@bluemobi.cn + * Description:(从URL中获取返回的输入流) + */ + + +public class OkHttpStreamFetcher implements DataFetcher { + private final OkHttpClient client; + private final GlideUrl url; + private InputStream stream; + private ResponseBody responseBody; + + public OkHttpStreamFetcher(OkHttpClient client, GlideUrl url) { + this.client = client; + this.url = url; + } + + @Override + public InputStream loadData(Priority priority) throws Exception { + Request.Builder requestBuilder = new Request.Builder() + .url(url.toStringUrl()); + + for (Map.Entry headerEntry : url.getHeaders().entrySet()) { + String key = headerEntry.getKey(); + requestBuilder.addHeader(key, headerEntry.getValue()); + } + + Request request = requestBuilder.build(); + + Response response = client.newCall(request).execute(); + responseBody = response.body(); + if (!response.isSuccessful()) { + throw new IOException("Request failed with code: " + response.code()); + } + + long contentLength = responseBody.contentLength(); + stream = ContentLengthInputStream.obtain(responseBody.byteStream(), contentLength); + return stream; + } + + @Override + public void cleanup() { + if (stream != null) { + try { + stream.close(); + } catch (IOException e) { + // Ignored + } + } + if (responseBody != null) { + responseBody.close(); + } + } + + @Override + public String getId() { + return url.getCacheKey(); + } + + @Override + public void cancel() { + // TODO: call cancel on the client when this method is called on a background thread. See #257 + } + + + +} From 8d14bfadbf6bc93481c317bddb3b128253db3a8f Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:53:08 +0800 Subject: [PATCH 05/10] Rename OkHttpStreamFetcher to OkHttpStreamFetcher.java --- .../glide/{OkHttpStreamFetcher => OkHttpStreamFetcher.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/corelibs/glide/{OkHttpStreamFetcher => OkHttpStreamFetcher.java} (100%) diff --git a/src/main/java/com/corelibs/glide/OkHttpStreamFetcher b/src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java similarity index 100% rename from src/main/java/com/corelibs/glide/OkHttpStreamFetcher rename to src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java From 3694f21cd74424ee9547890244198421b9ba9203 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 14:53:59 +0800 Subject: [PATCH 06/10] Create IgnoreCertificateOkHttpClient.java --- .../glide/IgnoreCertificateOkHttpClient.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/IgnoreCertificateOkHttpClient.java diff --git a/src/main/java/com/corelibs/glide/IgnoreCertificateOkHttpClient.java b/src/main/java/com/corelibs/glide/IgnoreCertificateOkHttpClient.java new file mode 100644 index 0000000..840c9e2 --- /dev/null +++ b/src/main/java/com/corelibs/glide/IgnoreCertificateOkHttpClient.java @@ -0,0 +1,53 @@ +mport java.lang.reflect.Field; +import java.security.SecureRandom; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import okhttp3.OkHttpClient; + +/** + * Author: yangdm + * Email:yangdm@bluemobi.cn + * Description:(忽略证书访问HTTPS接口 + */ + + +public class IgnoreCertificateOkHttpClient { + public static OkHttpClient getOkHttpsClient() { + OkHttpClient sClient = new OkHttpClient(); + SSLContext sc = null; + try { sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[]{ + new X509TrustManager() { + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { } + @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null;} }}, + new SecureRandom()); } catch (Exception e) { + e.printStackTrace(); } + HostnameVerifier hv1 = new HostnameVerifier() { + @Override + public boolean verify(String hostname, SSLSession session) { + return true; } }; + String workerClassName="okhttp3.OkHttpClient"; + try { + Class workerClass = Class.forName(workerClassName); + Field hostnameVerifier = workerClass.getDeclaredField("hostnameVerifier"); + hostnameVerifier.setAccessible(true); + hostnameVerifier.set(sClient, hv1); + Field sslSocketFactory = workerClass.getDeclaredField("sslSocketFactory"); + sslSocketFactory.setAccessible(true); + sslSocketFactory.set(sClient, sc.getSocketFactory()); + } catch (Exception e) { + e.printStackTrace(); + } + return sClient; + } + +} From 637312bf7088481607c2cb07fdd02acdc6f5df73 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 15:24:15 +0800 Subject: [PATCH 07/10] Create CustomGlideModule.java --- .../com/corelibs/glide/CustomGlideModule.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/CustomGlideModule.java diff --git a/src/main/java/com/corelibs/glide/CustomGlideModule.java b/src/main/java/com/corelibs/glide/CustomGlideModule.java new file mode 100644 index 0000000..7f69114 --- /dev/null +++ b/src/main/java/com/corelibs/glide/CustomGlideModule.java @@ -0,0 +1,35 @@ +import android.content.Context; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.GlideBuilder; +import com.bumptech.glide.load.model.GlideUrl; +import com.bumptech.glide.module.GlideModule; + +import java.io.InputStream; + +/** + * Author: yangdm + * Email:yangdm@bluemobi.cn + * Description:(自定义的GlideModule) + */ + public class CustomGlideModule implements GlideModule { + @Override + public void applyOptions(Context context, GlideBuilder builder) { + // Do nothing. + } + + /** + * 此方法为Glide请求网络库组件的入口 + * @param context + * @param glide + */ + @Override + public void registerComponents(Context context, Glide glide) { + /** + * 传入已忽略证书的OkHttpClient + */ + glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory()); + } + + +} From ee8226d0375af66b009da07d2f8f1c039c6b11a7 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 15:27:45 +0800 Subject: [PATCH 08/10] Create GlideUtils --- src/main/java/com/corelibs/glide/GlideUtils | 157 ++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/GlideUtils diff --git a/src/main/java/com/corelibs/glide/GlideUtils b/src/main/java/com/corelibs/glide/GlideUtils new file mode 100644 index 0000000..db3d794 --- /dev/null +++ b/src/main/java/com/corelibs/glide/GlideUtils @@ -0,0 +1,157 @@ +import android.content.Context; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.Priority; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.drawable.GlideDrawable; +import com.bumptech.glide.request.RequestListener; +import com.bumptech.glide.request.target.SimpleTarget; + +import jp.wasabeef.glide.transformations.BlurTransformation; +import jp.wasabeef.glide.transformations.CropCircleTransformation; +import jp.wasabeef.glide.transformations.GrayscaleTransformation; +import jp.wasabeef.glide.transformations.RoundedCornersTransformation; + +/** + * Author: yangdm + * Email:yangdm@bluemobi.cn + * Description:(Glide工具类) + */ +public class GlideUtils { + + private static GlideUtils instance; + public static GlideUtils getInstance(){ + if(instance==null){ + synchronized (GlideUtils.class) { + if(instance==null){ + instance=new GlideUtils(); + } + } + } + return instance; + } + //默认加载 + public void loadImageView(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().into(mImageView); + } + + //加载指定大小 + public void loadImageViewSize(Context mContext, String path, int width, int height, ImageView mImageView) { + Glide.with(mContext).load(path).override(width, height).centerCrop().into(mImageView); + } + + //加载指定大小和圆角 + public void loadImageViewSizeOrCircleHorn(Context mContext, String path, int width, int height, ImageView mImageView) { + Glide.with(mContext).load(path).override(width, height).centerCrop().bitmapTransform(new RoundedCornersTransformation(mContext,30,0, RoundedCornersTransformation.CornerType.ALL)).into(mImageView); + } + //圆形处理 + public void loadImageViewCircleShape(Context mContext, String path,ImageView mImageView){ + Glide.with(mContext).load(path).centerCrop().bitmapTransform(new CropCircleTransformation(mContext)).into(mImageView); + } + + //圆角处理 + public void loadImageViewCircleHorn(Context mContext, String path,ImageView mImageView){ + + Glide.with(mContext).load(path).centerCrop().bitmapTransform(new RoundedCornersTransformation(mContext,10,0, RoundedCornersTransformation.CornerType.ALL)).into(mImageView); + } + //灰度处理 + public void loadImageViewGrayscale(Context mContext, String path,ImageView mImageView){ + + Glide.with(mContext).load(path).centerCrop().bitmapTransform(new GrayscaleTransformation(mContext)).into(mImageView); + } + + //设置加载中以及加载失败图片 + public void loadImageViewLoding(Context mContext, String path, ImageView mImageView, int lodingImage, int errorImageView) { + Glide.with(mContext).load(path).centerCrop().placeholder(lodingImage).error(errorImageView).into(mImageView); + } + + //设置加载中以及加载失败图片并且指定大小 + public void loadImageViewLodingSize(Context mContext, String path, int width, int height, ImageView mImageView, int lodingImage, int errorImageView) { + Glide.with(mContext).load(path).centerCrop().override(width, height).placeholder(lodingImage).error(errorImageView).into(mImageView); + } + + //设置跳过内存缓存 + public static void loadImageViewCache(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().skipMemoryCache(true).into(mImageView); + } + + //设置下载优先级 + public void loadImageViewPriority(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().priority(Priority.NORMAL).into(mImageView); + } + + + //设置缓存策略 + public void loadImageViewDiskCache(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().diskCacheStrategy(DiskCacheStrategy.ALL).into(mImageView); + } + + /** + * 几个常用的动画:比如crossFade() + */ + + //设置加载动画 + public void loadImageViewAnim(Context mContext, String path, int anim, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().animate(anim).into(mImageView); + } + + /** + * 会先加载缩略图 + */ + + //设置缩略图支持 + public void loadImageViewThumbnail(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().thumbnail(0.1f).into(mImageView); + } + + /** + * api提供了比如:centerCrop()、fitCenter()等 + */ + + //设置动态转换 + public void loadImageViewCrop(Context mContext, String path, ImageView mImageView) { + Glide.with(mContext).load(path).centerCrop().into(mImageView); + } + +// //设置动态GIF加载方式 +// public void loadImageViewDynamicGif(Context mContext, String path, ImageView mImageView) { +// Glide.with(mContext).load(path).asGif().into(mImageView); +// } + +// //设置静态GIF加载方式 +// public static void loadImageViewStaticGif(Context mContext, String path, ImageView mImageView) { +// Glide.with(mContext).load(path).asBitmap().into(mImageView); +// } + + //设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘 + + //设置监听请求接口 + public void loadImageViewListener(Context mContext, String path, ImageView mImageView, RequestListener requstlistener) { + Glide.with(mContext).load(path).listener(requstlistener).into(mImageView); + } + + //项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排 + + //设置要加载的内容 + public void loadImageViewContent(Context mContext, String path, SimpleTarget simpleTarget) { + Glide.with(mContext).load(path).centerCrop().into(simpleTarget); + } + + //清理磁盘缓存 + public void GuideClearDiskCache(Context mContext) { + //理磁盘缓存 需要在子线程中执行 + Glide.get(mContext).clearDiskCache(); + } + + //清理内存缓存 + public void GuideClearMemory(Context mContext) { + //清理内存缓存 可以在UI主线程中进行 + Glide.get(mContext).clearMemory(); + } + + //高斯模糊 + public void loadImageViewBlurred(Context mContext, String path,ImageView mImageView){ + + Glide.with(mContext).load(path).bitmapTransform(new BlurTransformation(mContext)).into(mImageView); + } From f8dad36d84175a0660d246878ca4b6abd8db09b2 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 15:28:23 +0800 Subject: [PATCH 09/10] Rename GlideUtils to GlideUtils.java --- src/main/java/com/corelibs/glide/{GlideUtils => GlideUtils.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/corelibs/glide/{GlideUtils => GlideUtils.java} (100%) diff --git a/src/main/java/com/corelibs/glide/GlideUtils b/src/main/java/com/corelibs/glide/GlideUtils.java similarity index 100% rename from src/main/java/com/corelibs/glide/GlideUtils rename to src/main/java/com/corelibs/glide/GlideUtils.java From 1a02b02704c8b420e182ac9c75e0865ee8020f06 Mon Sep 17 00:00:00 2001 From: bigYmm <2022955128@qq.com> Date: Wed, 28 Dec 2016 15:40:12 +0800 Subject: [PATCH 10/10] Create readme.txt --- src/main/java/com/corelibs/glide/readme.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/com/corelibs/glide/readme.txt diff --git a/src/main/java/com/corelibs/glide/readme.txt b/src/main/java/com/corelibs/glide/readme.txt new file mode 100644 index 0000000..86706e9 --- /dev/null +++ b/src/main/java/com/corelibs/glide/readme.txt @@ -0,0 +1,13 @@ +使用说明: + +dependencies { + 注释掉coreLibs里build.gradle里的此包 +// compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar' + } + + + 在自己的项目工程AndroidManifest.xml的里 配置 + +