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()); + } + + +} diff --git a/src/main/java/com/corelibs/glide/GlideUtils.java b/src/main/java/com/corelibs/glide/GlideUtils.java new file mode 100644 index 0000000..db3d794 --- /dev/null +++ b/src/main/java/com/corelibs/glide/GlideUtils.java @@ -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); + } 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; + } + +} diff --git a/src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java b/src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java new file mode 100644 index 0000000..8210438 --- /dev/null +++ b/src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java @@ -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 + } + + + +} 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); + } +} 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的里 配置 + +