-
-
一個對圖片進行管理的Android工具類,包括了對下載好的圖片進行下緩存,獲取ImageLoader的實例,將一張圖片存儲到LruCache中,從LruCache中獲取一張圖片,獲取圖片大小,計算inSampleSize值,使用獲取到的inSampleSize值再次解析圖片等,是Android圖像處理的常用類,發上來供參考吧:
01
package
com.example.photowallfallsdemo;
02
import
android.graphics.Bitmap;
03
import
android.graphics.BitmapFactory;
04
import
android.util.LruCache;
05
/*對圖片進行管理的工具類。
06
* @author Tony
07
*/
08
public class ImageLoader {
09
10
/*圖片緩存技術的核心類,用於緩存所有下載好的圖片,在程序內存達到設定值時會將最少最近使用的圖片移除掉。*/
11
private static LruCache<String, Bitmap> mMemoryCache;
12
13
/*ImageLoader的實例。*/
14
private static ImageLoader mImageLoader;
15
private ImageLoader() {
16
// 獲取應用程序最大可用內存
17
int maxMemory = (int) Runtime.getRuntime().maxMemory();
18
int cacheSize = maxMemory / 8;
19
// 設置圖片緩存大小爲程序最大可用內存的1/8
20
mMemoryCache = new LruCache<String, Bitmap>(cacheSize) {
21
@Override
22
protected int sizeOf(String key, Bitmap bitmap) {
23
return bitmap.getByteCount();
24
}
25
};
26
}
27
/**
28
* 獲取ImageLoader的實例。
29
* @return ImageLoader的實例。
30
*/
31
public static ImageLoader getInstance() {
32
if (mImageLoader == null) {
33
mImageLoader = new ImageLoader();
34
}
35
return mImageLoader;
36
}
37
38
/**
39
* 將一張圖片存儲到LruCache中。
40
* @param key
41
* LruCache的鍵,這裏傳入圖片的URL地址。
42
* @param bitmap
43
* LruCache的鍵,這裏傳入從網絡上下載的Bitmap對象。
44
*/
45
public void addBitmapToMemoryCache(String key, Bitmap bitmap) {
46
if (getBitmapFromMemoryCache(key) == null) {
47
mMemoryCache.put(key, bitmap);
48
}
49
}
50
51
/**
52
* 從LruCache中獲取一張圖片,如果不存在就返回null。
53
* @param key
54
* LruCache的鍵,這裏傳入圖片的URL地址。
55
* @return 對應傳入鍵的Bitmap對象,或者null。
56
*/
57
public
Bitmap getBitmapFromMemoryCache(String key) {
58
return
mMemoryCache.get(key);
59
}
60
61
public
static
int
calculateInSampleSize(BitmapFactory.Options options,
62
int
reqWidth) {
63
// 源圖片的寬度
64
final
int
width = options.outWidth;
65
int
inSampleSize =
1
;
66
if
(width > reqWidth) {
67
// 計算出實際寬度和目標寬度的比率
68
final
int
widthRatio = Math.round((
float
) width / (
float
) reqWidth);
69
inSampleSize = widthRatio;
70
}
71
return
inSampleSize;
72
}
73
74
public
static
Bitmap decodeSampledBitmapFromResource(String pathName,
75
int
reqWidth) {
76
// 第一次解析將inJustDecodeBounds設置爲true,來獲取圖片大小
77
final
BitmapFactory.Options options =
new
BitmapFactory.Options();
78
options.inJustDecodeBounds =
true
;
79
BitmapFactory.decodeFile(pathName, options);
80
// 調用上面定義的方法計算inSampleSize值
81
options.inSampleSize = calculateInSampleSize(options, reqWidth);
82
// 使用獲取到的inSampleSize值再次解析圖片
83
options.inJustDecodeBounds =
false
;
84
return
BitmapFactory.decodeFile(pathName, options);
85
}
86
}
圖片管理Android工具類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.