package com.basic.security.utils; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.LruCache; import android.widget.ImageView; /** * Created by hasee on 2018/7/17. */ public class ImageUtils { public static LruCache imgCache; private static void init(){ int maxCache = (int) (Runtime.getRuntime().maxMemory() / 1024); imgCache = new LruCache(maxCache / 8){ @Override protected int sizeOf(String key, Bitmap value) { return value.getByteCount() / 1024; } @Override protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { oldValue.recycle(); oldValue = null; super.entryRemoved(evicted, key, oldValue, newValue); } }; } public static Bitmap setScaleBitmap(String path, ImageView imageView){ if (imgCache == null){ init(); } Bitmap bitmap = imgCache.get(path); if (bitmap != null){ imageView.setImageBitmap(bitmap); return bitmap; } BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); int imageWidth = options.outWidth; int imageHeight = options.outHeight; int viewWidth = imageView.getWidth(); int viewHeight = imageView.getHeight(); int scale = 1; if (viewWidth ==0 || viewHeight ==0){ imageView.setImageBitmap(BitmapFactory.decodeFile(path)); return null; } int scaleWidth = imageWidth / viewWidth; int scaleHeight = imageHeight / viewHeight; if (scaleWidth >= scaleHeight && scaleWidth > 1){ scale = scaleWidth; }else if (scaleWidth < scaleHeight && scaleHeight > 1){ scale = scaleHeight; } options.inSampleSize = scale; options.inJustDecodeBounds = false; options.inPreferredConfig = Bitmap.Config.RGB_565; bitmap = BitmapFactory.decodeFile(path, options); imageView.setImageBitmap(bitmap); imgCache.put(path, bitmap); return bitmap; } }