Skip to content

Commit 7ae8469

Browse files
author
jhonjson
committed
添加图片加载相关
1 parent 35e9289 commit 7ae8469

33 files changed

Lines changed: 2659 additions & 13 deletions

app/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ android {
1717
}
1818
}
1919
}
20+
21+
compileOptions {
22+
sourceCompatibility = '1.8'
23+
targetCompatibility = '1.8'
24+
}
25+
2026
buildTypes {
2127
debug {
2228
minifyEnabled false

config.gradle

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ ext {
1717
//support配置
1818
support = [
1919
"constraint-layout" : "1.0.0-beta2",
20-
'support-v4' : "com.android.support:support-v4:${versions["support-version"]}",
21-
'appcompat-v7' : "com.android.support:appcompat-v7:${versions["support-version"]}",
22-
'recyclerview-v7' : "com.android.support:recyclerview-v7:${versions["support-version"]}",
23-
'support-v13' : "com.android.support:support-v13:${versions["support-version"]}",
24-
'support-fragment' : "com.android.support:support-fragment:${versions["support-version"]}",
2520
'design' : "com.android.support:design:${versions["support-version"]}",
2621
'animated-vector-drawable': "com.android.support:animated-vector-drawable:${versions["support-version"]}",
2722
'junit' : "junit:junit:${versions["junit-version"]}",
@@ -47,15 +42,17 @@ ext {
4742
"logging-interceptor" : "com.squareup.okhttp3:logging-interceptor:3.11.0",
4843
"converter-gson" : "com.squareup.retrofit2:converter-gson:2.4.0",
4944
//glide图片加载
50-
"glide" : "com.github.bumptech.glide:glide:4.8.0",
51-
"glide-compiler" : "com.github.bumptech.glide:compiler:4.8.0",
45+
"glide" : "com.github.bumptech.glide:glide:4.9.0",
46+
"glide-compiler" : "com.github.bumptech.glide:compiler:4.9.0",
47+
"glide-annotations" : "com.github.bumptech.glide:annotations:4.9.0",
5248
//json解析
5349
"gson" : "com.google.code.gson:gson:2.8.5",
5450
//阿里
5551
"fastjson" : "com.alibaba:fastjson:1.1.70.android",
5652
//阿里路由框架
5753
"arouter-api" : "com.alibaba:arouter-api:1.4.1",
5854
"arouter-compiler" : "com.alibaba:arouter-compiler:1.2.2",
55+
'androidx-annotation' : "androidx.annotation:annotation:1.0.0",
5956
]
6057
}
6158

library_base/build.gradle

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ android {
99
versionCode rootProject.ext.android.versionCode
1010
versionName rootProject.ext.android.versionName
1111
}
12+
1213
sourceSets {
1314
main {
1415
jniLibs.srcDirs = ['libs']
@@ -30,6 +31,11 @@ android {
3031
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
3132
}
3233
}
34+
35+
compileOptions {
36+
sourceCompatibility = '1.8'
37+
targetCompatibility = '1.8'
38+
}
3339
}
3440

3541
dependencies {
@@ -40,4 +46,10 @@ dependencies {
4046
api rootProject.ext.dependencies["arouter-api"]
4147

4248
api rootProject.ext.dependencies["rxlifecycle-components"]
49+
//阿里路由框架
50+
api rootProject.ext.dependencies["glide"]
51+
annotationProcessor rootProject.ext.dependencies["glide-compiler"]
52+
annotationProcessor rootProject.ext.dependencies["androidx-annotation"]
53+
api rootProject.ext.dependencies["glide-annotations"]
54+
api rootProject.ext.dependencies["okhttp"]
4355
}

library_base/proguard-rules.pro

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,12 @@
1919
# If you keep the line number information, uncomment this to
2020
# hide the original source file name.
2121
#-renamesourcefileattribute SourceFile
22+
23+
# 图片glide混淆
24+
-keep public class * implements com.bumptech.glide.module.GlideModule
25+
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
26+
**[] $VALUES;
27+
public *;
28+
}
29+
# for DexGuard only
30+
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools"
4-
package="com.play.library_base" />
4+
package="com.play.library_base">
5+
6+
<uses-permission android:name="android.permission.INTERNET" />
7+
//它可以监听用户的连接状态并在用户重新连接到网络时重启之前失败的请求
8+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
9+
//用于硬盘缓存和读取
10+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
11+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
12+
13+
</manifest>
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.play.library_base.imageloader;
2+
3+
import android.content.Context;
4+
import android.graphics.Bitmap;
5+
import android.graphics.drawable.Drawable;
6+
import android.net.Uri;
7+
import android.widget.ImageView;
8+
9+
import androidx.annotation.DrawableRes;
10+
11+
import com.bumptech.glide.Glide;
12+
import com.bumptech.glide.GlideBuilder;
13+
import com.bumptech.glide.MemoryCategory;
14+
import com.bumptech.glide.RequestBuilder;
15+
import com.bumptech.glide.load.Transformation;
16+
import com.bumptech.glide.load.engine.cache.ExternalCacheDiskCacheFactory;
17+
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
18+
import com.bumptech.glide.request.target.DrawableImageViewTarget;
19+
import com.bumptech.glide.request.transition.Transition;
20+
import com.play.library_base.imageloader.progress.OnProgressListener;
21+
import com.play.library_base.imageloader.progress.ProgressManager;
22+
23+
import java.lang.ref.WeakReference;
24+
25+
/**
26+
* @author by sunfusheng on 2017/6/6.
27+
*/
28+
public class GlideImageLoader {
29+
30+
protected static final String ANDROID_RESOURCE = "android.resource://";
31+
protected static final String FILE = "file://";
32+
protected static final String SEPARATOR = "/";
33+
34+
private String url;
35+
private WeakReference<ImageView> imageViewWeakReference;
36+
private RequestBuilder<Drawable> glideRequest;
37+
38+
public static GlideImageLoader create(ImageView imageView) {
39+
return new GlideImageLoader(imageView);
40+
}
41+
42+
private GlideImageLoader(ImageView imageView) {
43+
imageViewWeakReference = new WeakReference<>(imageView);
44+
glideRequest = Glide.with(getContext()).asDrawable();
45+
}
46+
47+
public ImageView getImageView() {
48+
if (imageViewWeakReference != null) {
49+
return imageViewWeakReference.get();
50+
}
51+
return null;
52+
}
53+
54+
public Context getContext() {
55+
if (getImageView() != null) {
56+
return getImageView().getContext();
57+
}
58+
return null;
59+
}
60+
61+
public String getUrl() {
62+
return url;
63+
}
64+
65+
public RequestBuilder getGlideRequest() {
66+
if (glideRequest == null) {
67+
glideRequest = Glide.with(getContext()).asDrawable();
68+
}
69+
return glideRequest;
70+
}
71+
72+
protected Uri resId2Uri(@DrawableRes int resId) {
73+
return Uri.parse(ANDROID_RESOURCE + getContext().getPackageName() + SEPARATOR + resId);
74+
}
75+
76+
public GlideImageLoader load(@DrawableRes int resId, @DrawableRes int placeholder,Transformation<Bitmap> transformation) {
77+
return loadImage(resId2Uri(resId), placeholder, transformation);
78+
}
79+
80+
protected RequestBuilder<Drawable> loadImage(Object obj) {
81+
if (obj instanceof String) {
82+
url = (String) obj;
83+
}
84+
return glideRequest.load(obj);
85+
}
86+
87+
88+
protected GlideImageLoader loadImage(Object obj, @DrawableRes int placeholder, Transformation<Bitmap> transformation) {
89+
glideRequest = loadImage(obj);
90+
if (placeholder != 0) {
91+
glideRequest = glideRequest.placeholder(placeholder);
92+
}
93+
94+
if (transformation != null) {
95+
glideRequest = glideRequest.transform(transformation);
96+
}
97+
98+
glideRequest.into(new GlideImageViewTarget(getImageView()));
99+
return this;
100+
}
101+
102+
public GlideImageLoader listener(Object obj, OnProgressListener onProgressListener) {
103+
if (obj instanceof String) {
104+
url = (String) obj;
105+
}
106+
ProgressManager.addListener(url, onProgressListener);
107+
return this;
108+
}
109+
110+
private class GlideImageViewTarget extends DrawableImageViewTarget {
111+
GlideImageViewTarget(ImageView view) {
112+
super(view);
113+
}
114+
115+
@Override
116+
public void onLoadStarted(Drawable placeholder) {
117+
super.onLoadStarted(placeholder);
118+
}
119+
120+
@Override
121+
public void onLoadFailed(Drawable errorDrawable) {
122+
OnProgressListener onProgressListener = ProgressManager.getProgressListener(getUrl());
123+
if (onProgressListener != null) {
124+
onProgressListener.onProgress(true, 100, 0, 0);
125+
ProgressManager.removeListener(getUrl());
126+
}
127+
super.onLoadFailed(errorDrawable);
128+
}
129+
130+
@Override
131+
public void onResourceReady( Drawable resource,Transition<? super Drawable> transition) {
132+
OnProgressListener onProgressListener = ProgressManager.getProgressListener(getUrl());
133+
if (onProgressListener != null) {
134+
onProgressListener.onProgress(true, 100, 0, 0);
135+
ProgressManager.removeListener(getUrl());
136+
}
137+
super.onResourceReady(resource, transition);
138+
}
139+
}
140+
}

0 commit comments

Comments
 (0)