API Level 12 の方にはサンプルコードが載っています。
int cacheSize = 4 * 1024 * 1024; // 4MiB
LruCache bitmapCache = new LruCache(cacheSize) {
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
}
この LruCache は Support Package にもバックポートされています。
ここで注意点なのですが、上記のコードをこっちで使う場合は
int cacheSize = 4 * 1024 * 1024; // 4MiB
LruCache bitmapCache = new LruCache(cacheSize) {
protected int sizeOf(String key, Bitmap value) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
}
のようにします。
実は Bitmap の getByteCount() メソッドも API Level 12 からなんです。
このメソッドの中身は次のように getRowBytes() と getHeight() の積です。
http://tools.oesf.biz/android-4.0.1_r1.0/xref/frameworks/base/graphics/java/android/graphics/Bitmap.java#getByteCount
828 public final int getByteCount() {
829 // int result permits bitmaps up to 46,340 x 46,340
830 return getRowBytes() * getHeight();
831 }
わざわざ新しく API に入れるほどでもなかったのでは。。。
0 件のコメント:
コメントを投稿