Skip to content

Commit

Permalink
lib,解决编辑时网络图片显示异常,不能自适应高度的问题
Browse files Browse the repository at this point in the history
demo,解决https图片加载失败问题,Glide设置相关,与库无关
demo,XRichText图片加载器在Application初始化
  • Loading branch information
nuan1993 committed Nov 5, 2019
1 parent f06afeb commit 1ed5af6
Show file tree
Hide file tree
Showing 14 changed files with 207 additions and 135 deletions.
5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ android {
applicationId "com.sendtion.xrichtext"
minSdkVersion 14
targetSdkVersion 22
versionCode 12
versionName "1.9.2"
versionCode 14
versionName "1.9.4"
}

buildTypes {
Expand Down Expand Up @@ -37,6 +37,7 @@ dependencies {
//implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.9.0'

//implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:28.0.0'
Expand Down
61 changes: 60 additions & 1 deletion app/src/main/java/com/sendtion/xrichtextdemo/MyApplication.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
package com.sendtion.xrichtextdemo;

import android.app.Application;
import android.graphics.Bitmap;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.RelativeLayout;

import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import com.sendtion.xrichtext.IImageLoader;
import com.sendtion.xrichtext.XRichText;
import com.sendtion.xrichtextdemo.comm.TransformationScale;
import com.sendtion.xrichtextdemo.comm.UnsafeOkHttpClient;
import com.wenming.library.LogReport;
import com.wenming.library.save.imp.CrashWriter;
import com.wenming.library.save.imp.LogWriter;
import com.wenming.library.upload.email.EmailReporter;
import com.wenming.library.upload.http.HttpReporter;

import java.io.InputStream;

import okhttp3.OkHttpClient;

public class MyApplication extends Application {

@Override
Expand All @@ -22,6 +41,46 @@ public void onCreate() {
// 使用以下方法,打印Log的同时,把Log信息保存到本地(保存的时候会附带线程名称,线程id,打印时间),
// 并且随同崩溃日志一起,发送到特定的邮箱或者服务器上。帮助开发者还原用户的操作路径,更好的分析崩溃产生的原因
//LogWriter.writeLog("wenming", "打Log测试!!!!");

XRichText.getInstance().setImageLoader(new IImageLoader() {
@Override
public void loadImage(final String imagePath, final ImageView imageView, final int imageHeight) {
Log.e("---", "imageHeight: "+imageHeight);
//如果是网络图片
if (imagePath.startsWith("http://") || imagePath.startsWith("https://")){
Glide.with(getApplicationContext()).asBitmap().load(imagePath).dontAnimate()
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
if (imageHeight > 0) {//固定高度
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, imageHeight);//固定图片高度,记得设置裁剪剧中
lp.bottomMargin = 10;//图片的底边距
imageView.setLayoutParams(lp);
Glide.with(getApplicationContext()).asBitmap().load(imagePath).centerCrop()
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(imageView);
} else {//自适应高度
Glide.with(getApplicationContext()).asBitmap().load(imagePath)
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(new TransformationScale(imageView));
}
}
});
} else { //如果是本地图片
if (imageHeight > 0) {//固定高度
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, imageHeight);//固定图片高度,记得设置裁剪剧中
lp.bottomMargin = 10;//图片的底边距
imageView.setLayoutParams(lp);

Glide.with(getApplicationContext()).asBitmap().load(imagePath).centerCrop()
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(imageView);
} else {//自适应高度
Glide.with(getApplicationContext()).asBitmap().load(imagePath)
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(new TransformationScale(imageView));
}
}
}
});
}

private void initCrashReport() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.sendtion.xrichtextdemo.comm;

import android.content.Context;
import android.support.annotation.NonNull;

import com.bumptech.glide.Glide;
import com.bumptech.glide.Registry;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader;
import com.bumptech.glide.load.model.GlideUrl;
import com.bumptech.glide.module.AppGlideModule;

import java.io.InputStream;

import okhttp3.OkHttpClient;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
OkHttpClient client = UnsafeOkHttpClient.getUnsafeOkHttpClient();
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.sendtion.xrichtextdemo.comm;

import java.security.cert.CertificateException;
import java.util.concurrent.TimeUnit;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import okhttp3.OkHttpClient;

/**
* 跳过HTTPs检测,能正常加载https图片
*/
public class UnsafeOkHttpClient {
public static OkHttpClient getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}

@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}

@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};

// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});

builder.connectTimeout(20, TimeUnit.SECONDS);
builder.readTimeout(20,TimeUnit.SECONDS);
return builder.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
13 changes: 0 additions & 13 deletions app/src/main/java/com/sendtion/xrichtextdemo/ui/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,19 +49,6 @@ private void initView() {
Toolbar toolbar = findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);

XRichText.getInstance().setImageLoader(new IImageLoader() {
@Override
public void loadImage(String imagePath, ImageView imageView, boolean centerCrop) {
if (centerCrop) {
Glide.with(MainActivity.this).asBitmap().load(imagePath).centerCrop()
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(imageView);
} else {
Glide.with(MainActivity.this).asBitmap().load(imagePath)
.placeholder(R.mipmap.img_load_fail).error(R.mipmap.img_load_fail).into(new TransformationScale(imageView));
}
}
});

noteDao = new NoteDao(this);

RecyclerView rv_list_main = findViewById(R.id.rv_list_main);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,9 @@ public void subscribe(ObservableEmitter<String> emitter) {
}

// 测试插入网络图片 http://pics.sc.chinaz.com/files/pic/pic9/201904/zzpic17414.jpg
emitter.onNext("http://pics.sc.chinaz.com/files/pic/pic9/201903/zzpic16838.jpg");
//emitter.onNext("http://pics.sc.chinaz.com/files/pic/pic9/201903/zzpic16838.jpg");
emitter.onNext("http://b.zol-img.com.cn/sjbizhi/images/10/640x1136/1572123845476.jpg");
emitter.onNext("https://img.ivsky.com/img/tupian/pre/201903/24/richu_riluo-013.jpg");

emitter.onComplete();
}catch (Exception e){
Expand Down Expand Up @@ -521,7 +523,7 @@ public void onSubscribe(Disposable d) {

@Override
public void onNext(String imagePath) {
et_new_content.insertImage(imagePath, et_new_content.getMeasuredWidth());
et_new_content.insertImage(imagePath);
}
});
}
Expand Down
12 changes: 6 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
buildscript {
repositories {
google()
jcenter()
//mavenCentral()
//maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
//jcenter()
mavenCentral()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
Expand All @@ -23,9 +23,9 @@ buildscript {
allprojects {
repositories {
google()
jcenter()
//mavenCentral()
//maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
//jcenter()
mavenCentral()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url 'https://jitpack.io' }
}
}
Expand Down
4 changes: 2 additions & 2 deletions xrichtext/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ android {
defaultConfig {
minSdkVersion 14
targetSdkVersion 22
versionCode 12
versionName "1.9.2"
versionCode 14
versionName "1.9.4"

}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import android.widget.ImageView;

public interface IImageLoader {
void loadImage(String imagePath, ImageView imageView, boolean centerCrop);
void loadImage(String imagePath, ImageView imageView, int imageHeight);
}
Loading

0 comments on commit 1ed5af6

Please sign in to comment.