-
Notifications
You must be signed in to change notification settings - Fork 384
Expand file tree
/
Copy pathUniversalImageLoader.java
More file actions
147 lines (128 loc) · 5.58 KB
/
Copy pathUniversalImageLoader.java
File metadata and controls
147 lines (128 loc) · 5.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.vansz.universalimageloader;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import com.nostra13.universalimageloader.cache.memory.MemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
* 使用 <a href="https://github.com/nostra13/Android-Universal-Image-Loader">
* Android-Universal-Image-Loader</a>作为 Transferee 的图片加载器
* <p>
* Created by Vans Z on 2017/5/3.
* <p>
* email: 196425254@qq.com
*/
public class UniversalImageLoader implements com.hitomi.tilibrary.loader.ImageLoader {
private Map<String, SourceCallback> callbackMap;
private UniversalImageLoader(Context context) {
this.callbackMap = new HashMap<>();
initImageLoader(context);
}
public static UniversalImageLoader with(Context context) {
return new UniversalImageLoader(context);
}
private void initImageLoader(Context context) {
int memoryCacheSize = (int) (Runtime.getRuntime().maxMemory() / 3);
MemoryCache memoryCache;
memoryCache = new LruMemoryCache(memoryCacheSize);
DisplayImageOptions normalImageOptions = new DisplayImageOptions
.Builder()
.bitmapConfig(Bitmap.Config.RGB_565)
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.build();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration
.Builder(context)
.defaultDisplayImageOptions(normalImageOptions)
.denyCacheImageMultipleSizesInMemory()
.memoryCache(memoryCache)
.tasksProcessingOrder(QueueProcessingType.FIFO)
.threadPriority(Thread.NORM_PRIORITY - 2)
.threadPoolSize(3)
.imageDownloader(new BaseImageDownloader(context, 15000, 15000))
.build();
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(configuration);
}
@Override
public void loadSource(final String imageUrl, final SourceCallback callback) {
callbackMap.put(imageUrl, callback);
DisplayImageOptions options = new DisplayImageOptions
.Builder()
.bitmapConfig(Bitmap.Config.RGB_565)
.imageScaleType(ImageScaleType.NONE)
.cacheOnDisk(true)
.resetViewBeforeLoading(true)
.build();
ImageLoader.getInstance().loadImage(imageUrl, null, options, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
SourceCallback callback = callbackMap.get(imageUrl);
if (callback != null)
callback.onStart();
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
SourceCallback callback = callbackMap.get(imageUrl);
if (callback != null) {
callback.onDelivered(STATUS_DISPLAY_FAILED, null);
callbackMap.remove(imageUrl);
}
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
SourceCallback callback = callbackMap.get(imageUrl);
if (callback != null) {
callback.onDelivered(STATUS_DISPLAY_SUCCESS, getCache(imageUri));
callbackMap.remove(imageUrl);
}
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
SourceCallback callback = callbackMap.get(imageUrl);
if (callback != null) {
callback.onDelivered(STATUS_DISPLAY_FAILED, null);
callbackMap.remove(imageUrl);
}
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String imageUri, View view, int current, int total) {
SourceCallback callback = callbackMap.get(imageUrl);
if (callback != null)
callback.onProgress(current * 100 / total);
}
});
}
@Override
public void clearCache() {
ImageLoader.getInstance().getMemoryCache().clear();
ImageLoader.getInstance().getDiskCache().clear();
}
@Override
public File getCache(String url) {
File cache = ImageLoader.getInstance().getDiskCache().get(url);
return (cache != null && cache.exists()) ? cache : null;
}
@Override
public File getCacheDir() {
return ImageLoader.getInstance().getDiskCache().getDirectory();
}
@Override
public String getCacheFileName(String url) {
String[] nameArray = url.split("/");
return nameArray[nameArray.length - 1];
}
}