Image-loader图片加载框架下载图片及自定义途径
【tips】:
上一节课讲了如何傻瓜式配置Universal-Image-Loader框架,现在我们来讨论下,如何定义图片下载路径名称以及格式,这里我们就要讨论下了,那么Universal-Image-Loader框架默认缓存的图片会是什么样。
首先我们在内存卡中找到了我们的包:ImageLoader
上面是这几次拿来实验的图片,不过呢,仔细一看其实很不像图片:
我们来看下
==================================================================================
情况一
默认缓存,这种情况下无需做处理,下载下来的是默认的文件格式,名字也是默认。图片大小比原来小。
这是下载下来的图片,观看的时候还要选择。不过好处是基本已经裁剪过了,显示比较小。
==================================================================================
情况二:
自定义缓存位置图片名称以及格式
<!--EndFragment-->
public void loadimage(View v){ final ImageView mImageView = (ImageView) findViewById(R.id.image); String imageUrl="http://p4.so.qhmsg.com/sdr/1228_768_/t01a44e436353c96159.jpg"; // ImageLoader.getInstance().displayImage(imageUrl, mImageView); // imageUrl代表图片的URL地址,imageView代表承载图片的IMAGEVIEW控件 ImageSize mImageSize = new ImageSize(500, 800); //显示图片的配置 DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) //设置图片在下载期间显示的图片 .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.drawable.ic_launcher) //设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)//设置下载的图片是否缓存在内存中 .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中 .considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// //.delayBeforeLoading(int delayInMillis)//int delayInMillis为你设置的下载前的延迟时间 //设置图片加入缓存前,对bitmap进行设置 //.preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位 .displayer(new RoundedBitmapDisplayer(80))//是否设置为圆角,弧度为多少 .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间 .build();//构建完成 for(i=0;i<imgname.length;i++){ imageload.loadImage(imgname[i], mImageSize, options, new SimpleImageLoadingListener(){ @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); mImageView.setImageBitmap(loadedImage); /** 保存方法 */ File f=new File("/storage/emulated/0/imageloader/cache/"+i+".png"); if (f.exists()) { f.delete(); } try { FileOutputStream out = new FileOutputStream(f); loadedImage.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); Log.i("TAG", "已经保存"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } }
将昨天的代码改了下:
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage)
在这个方法中,下载完成后会给我们一个Bitmap的图片文件,也是用于显示在ImageView上面的,既然已经获取到了Bitmap那么将它保存在本地也是十分方便简单的的,这样的话就可以完美解决默认缓存坑爹的名字和格式了。因为每次下载一个图片需要提供一个URL地址,所以呢为了类区分,专门建立一个类用于存放URL
public class ConfigField { public static class ImageURL{ public static final String yuelu[]=new String[]{"http://img.ivsky.com/img/tupian/img/201105/02/hunan_changsha_yuelushuyuan-013.jpg", "http://pic19.nipic.com/20120327/2885592_152659703164_2.jpg","http://img.ivsky.com/img/tupian/img/201105/02/hunan_changsha_yuelushuyuan-009.jpg" ,"http://a3.att.hudong.com/03/86/20300000432220134079869338986.jpg", "http://img.ivsky.com/img/tupian/img/201105/02/hunan_changsha_yuelushuyuan-001.jpg"}; } }
由上面的代码看出所有的URL保存在String类型数组里面使用static修饰符可以用类直接调用,比较方便。MainActivity建立一个字符串数组来接收这个URL
public String[] imgname=ConfigField.ImageURL.yuelu;
使用for循环一直加载
这样运行后打开手机内存卡看到的情况是:
到此已经成功,上面的代码还有些疑问,因为切割的圆角图片并没有成功,这个回去研究一下,下节课发上来
<!--EndFragment-->