/** * cancelarExtractorInnecesario: Checa si ya existe un extractor para dicha ruta de imagen, de ser * asi lo cancela. * * @param ruta String de la ruta de la imagen * @param contenedor_imagen ImageView del contenedor de la imagen * @return false si ya existe un hilo extrayendo ese bitmap, true si no existe o se logro cancelar * un hilo innecesario */ public static boolean cancelarExtractorInnecesario(String ruta, ImageView contenedor_imagen) { // Obtenemos el hilo linkeado a este contenedor, si el contenedor ya se reciclo, no // coincidiran las rutas y lo cancelamos final HiloExtractorBitmap extractor = obtenerHiloExtractorBitmap(contenedor_imagen); if (extractor != null) { if (extractor.ruta.equals(RUTA_AUN_NO_INDICADA) || !extractor.ruta.equals(ruta)) { extractor.cancel(true); } else { return false; } } return true; }
/** * extraerImagenEn: Extrae el bitmap de la ruta especificada con el tamano necesario para situarlo * en el contenedor que se especifique, de forma optima para el ahorro de recursos. * * @param activity contexto donde se ubica el contenedor. * @param contenedor_imagen ImageView que contendra a la imagen una vez cargada. * @param ruta String con la ruta del almacenamiento externo donde se ubica el bitmap. */ public void extraerImagenListaEn(Activity activity, ImageView contenedor_imagen, String ruta) { if (cancelarExtractorInnecesario(ruta, contenedor_imagen)) { final Bitmap bitmap_cache = memoria_cache.get(ruta); if (bitmap_cache != null) { contenedor_imagen.setImageBitmap(bitmap_cache); } else { // si ya se libero el extractor innecesario se inicia uno nuevo con la nueva imagen HiloExtractorBitmap extractor = new HiloExtractorBitmap(contenedor_imagen); contenedor_imagen.setImageDrawable( new AsyncDrawable(activity.getResources(), imagen_cargando, extractor)); String parametros[] = {ruta}; extractor.execute(parametros); } } }