Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions src/main/java/com/corelibs/glide/CustomGlideModule.java
Original file line number Diff line number Diff line change
@@ -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());
}


}
157 changes: 157 additions & 0 deletions src/main/java/com/corelibs/glide/GlideUtils.java
Original file line number Diff line number Diff line change
@@ -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<String, GlideDrawable> requstlistener) {
Glide.with(mContext).load(path).listener(requstlistener).into(mImageView);
}

//项目中有很多需要先下载图片然后再做一些合成的功能,比如项目中出现的图文混排

//设置要加载的内容
public void loadImageViewContent(Context mContext, String path, SimpleTarget<GlideDrawable> 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);
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
82 changes: 82 additions & 0 deletions src/main/java/com/corelibs/glide/OkHttpStreamFetcher.java
Original file line number Diff line number Diff line change
@@ -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<InputStream> {
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<String, String> 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
}



}
Loading