`

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-->

  • 大小: 14.9 KB
  • 大小: 28.3 KB
  • 大小: 18.4 KB
  • 大小: 6.8 KB
  • 大小: 37.3 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics