人(鄙)狠(人)话(非)不(常)多(懒),直接上代码!
private LruCache
mLruCache;
private void setLruCache() {
if (mLruCache == null) {
mLruCache = LruCacheUtils.getBitmapCache();
}
//定义之前一定要先清理缓存,只存当前浏览图片的上一张和下一张
mLruCache.evictAll();
//获取当前图片的上一张图片路径,假如加入缓存
String lastPicPath = mPicList.get(Math.abs(mCurrentPosition - 1)).toString();
String nextPicPath = null;
Log.d(TAG, "current position: " + mCurrentPosition);
//获取当天图片的下一张图片路径,加入缓存
nextPicPath = mPicList.get(mCurrentPosition - 1).toString();
mLruCache.put(nextPicPath, getZoomBitmap(nextPicPath));
mLruCache.put(lastPicPath, getZoomBitmap(lastPicPath));
}
public static Bitmap getZoomBitmap(String srcPath) {
try {
Bitmap bmp = mImageUtils.getImage(srcPath);
if (bmp != null) {
return bmp;
}
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(srcPath), null,
newOpts);
int scale = calculateInSampleSize(newOpts.outWidth, newOpts.outHeight);
Log.i(TAG, scale + "scale");
newOpts.inSampleSize = scale;
newOpts.inJustDecodeBounds = false;
return BitmapFactory.decodeStream(
new FileInputStream(srcPath),
null, newOpts);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
public static int calculateInSampleSize(int outWidth, int outHeight) {
int inSampleSize = 1;
if (outWidth > outHeight && outWidth > 280f) {
inSampleSize = (int) (outWidth / 280f);
} else if (outWidth < outHeight && outHeight > 280f) {
inSampleSize = (int) (outHeight / 280f);
} else if (outWidth == outHeight && outHeight > 280f) {
inSampleSize = (int) (outHeight / 280f);
}
if (inSampleSize <= 0) {
inSampleSize = 1;
}
Log.e(TAG, "inSampleSize = " + inSampleSize);
return inSampleSize;
}
/**
* 浏览当前图片,获取裁剪后的缓存图片
*/
private Bitmap getBitmap2Cache(Uri picUri) {
if (mLruCache == null) {
mLruCache = LruCacheUtils.getBitmapCache();
}
Bitmap picBitmap = mLruCache.get(picUri.toString());
if (picBitmap != null) {
mImageSwitcher.setImageDrawable(new BitmapDrawable(picBitmap));
} else {
mImageSwitcher.setImageDrawable(new BitmapDrawable(getZoomBitmap(picUri.toString())));
}
return picBitmap;
}
/**
* 举一个向左滑动的例子
*/
private void leftSlide() {
setLruCache();
//动画
mImageSwitcher.setInAnimation(AnimationUtils.loadAnimation(
getApplication(), R.anim.right_in));
mImageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(
getApplication(), R.anim.left_out));
mCurrentPosition--;
Uri uri = Uri.parse(mPicList.get(mCurrentPosition).toString());
getBitmap2Cache(uri);
setTime(uri.toString());
mCount.setText(mLength - mCurrentPosition + "/" + mPicList.size());
setSwitchIcon(mCurrentPosition);
}
Lrucache是android的标准,防止OOM用这个最好不过了。