zoukankan      html  css  js  c++  java
  • android图片缓存框架Android-Universal-Image-Loader(二)

    http://blog.csdn.net/king_is_everyone/article/details/35595515

    这篇打算直接告诉大家怎么用吧,其实这个也不是很难的框架,大致使用过程如下:

    1. // 获取缓存图片目录  
    2.     File cacheDir = StorageUtils.getOwnCacheDirectory(activity,  
    3.             "imageloader/Cache");  
    4.   
    5.     ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(  
    6.             activity).memoryCacheExtraOptions(800, 760)  
    7.             // 保存每个缓存图片的最大长和宽  
    8.             .threadPoolSize(3)  
    9.             .diskCache(new UnlimitedDiscCache(cacheDir))  
    10.             // 线程池的大小 这个其实默认就是3  
    11.             .memoryCacheSize(2 * 1024)  
    12.             // 设置缓存的最大字节  
    13.             .denyCacheImageMultipleSizesInMemory()  
    14.             // 缓存显示不同大小的同一张图片  
    15.             .imageDownloader(  
    16.                     new BaseImageDownloader(activity, 5 * 1000, 30 * 1000)) // connectTimeout  
    17.             // s)超时时间  
    18.             .build();  
    19.     imageLoader.init(config);  


    上面设置的目录在我手机的/storage/sdcard0/imageloader/Cache中文件是没有.jpg或者.png结尾的,是一堆无格式的文件,可以通过扩展名导出打开

         第二步设置显示图片选项:

    1. </pre><p></p><p><pre name="code" class="java">DisplayImageOptionsoptions = new DisplayImageOptions.Builder()  
    2. .showImageOnLoading(R.drawable.ic_launcher)//设置图片在下载期间显示的图片    
    3. .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片    
    4. .showImageOnFail(R.drawable.ic_launcher)//设置图片加载/解码过程中错误时候显示的图片  
    5. .cacheInMemory(true)//设置下载的图片是否缓存在内存中    
    6. .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中    
    7. .displayer(new FadeInBitmapDisplayer(100))  
    8. .considerExifParams(true)  
    9. .displayer(new FadeInBitmapDisplayer(100))// 图片加载好后渐入的动画时间  
    10. .displayer(new RoundedBitmapDisplayer(1)).build();//这个一定要设置,不设置的话会导致图片不能够铺满整个控件,这个是设置圆角效果的,如果大家不喜欢圆角可以设置为1几乎没有什么效果  



    
    

    通过上面的代码就可以正常使用了

    下面是官方给的一个列子,会android看看下面的这个代码应该就知道怎么使用了吧,非常简单

    1. public class ImageListActivity extends AbsListViewBaseActivity {  
    2.   
    3.     DisplayImageOptions options;  
    4.   
    5.     String[] imageUrls;  
    6.   
    7.     @Override  
    8.     public void onCreate(Bundle savedInstanceState) {  
    9.         super.onCreate(savedInstanceState);  
    10.         setContentView(R.layout.ac_image_list);  
    11.   
    12.         Bundle bundle = getIntent().getExtras();  
    13.         imageUrls = bundle.getStringArray(Extra.IMAGES);  
    14.   
    15.         options = new DisplayImageOptions.Builder()  
    16.             .showImageOnLoading(R.drawable.ic_stub)  
    17.             .showImageForEmptyUri(R.drawable.ic_empty)  
    18.             .showImageOnFail(R.drawable.ic_error)  
    19.             .cacheInMemory(true)  
    20.             .cacheOnDisk(true)  
    21.             .considerExifParams(true)  
    22.             .displayer(new RoundedBitmapDisplayer(20))  
    23.             .build();  
    24.   
    25.         listView = (ListView) findViewById(android.R.id.list);  
    26.         ((ListView) listView).setAdapter(new ItemAdapter());  
    27.         listView.setOnItemClickListener(new OnItemClickListener() {  
    28.             @Override  
    29.             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
    30.                 startImagePagerActivity(position);  
    31.             }  
    32.         });  
    33.     }  
    1. //注意下这里,当按下返回键的时候清除一下在内存中的图片,大家不过要过度依赖自动内存管理,有些时候还是手动去清除掉内存比较好,  
    2.     @Override  
    3.     public void onBackPressed() {  
    4.         AnimateFirstDisplayListener.displayedImages.clear();  
    5.         super.onBackPressed();  
    6.     }  
    7.   
    8.     private void startImagePagerActivity(int position) {  
    9.         Intent intent = new Intent(this, ImagePagerActivity.class);  
    10.         intent.putExtra(Extra.IMAGES, imageUrls);  
    11.         intent.putExtra(Extra.IMAGE_POSITION, position);  
    12.         startActivity(intent);  
    13.     }  
    14.   
    15.     private static class ViewHolder {  
    16.         TextView text;  
    17.         ImageView image;  
    18.     }  
    19.   
    20.     class ItemAdapter extends BaseAdapter {  
    21.   
    22.         private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();  
    23.   
    24.         @Override  
    25.         public int getCount() {  
    26.             return imageUrls.length;  
    27.         }  
    28.   
    29.         @Override  
    30.         public Object getItem(int position) {  
    31.             return position;  
    32.         }  
    33.   
    34.         @Override  
    35.         public long getItemId(int position) {  
    36.             return position;  
    37.         }  
    38.   
    39.         @Override  
    40.         public View getView(final int position, View convertView, ViewGroup parent) {  
    41.             View view = convertView;  
    42.             final ViewHolder holder;  
    43.             if (convertView == null) {  
    44.                 view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false);  
    45.                 holder = new ViewHolder();  
    46.                 holder.text = (TextView) view.findViewById(R.id.text);  
    47.                 holder.image = (ImageView) view.findViewById(R.id.image);  
    48.                 view.setTag(holder);  
    49.             } else {  
    50.                 holder = (ViewHolder) view.getTag();  
    51.             }  
    52.   
    53.             holder.text.setText("Item " + (position + 1));  
    54.   
    55.             imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener);  
    56.   
    57.             return view;  
    58.         }  
    59.     }  
    60.   
    61.     private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {  
    62.   
    63.         static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());  
    64.   
    65.         @Override  
    66.         public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {  
    67.             if (loadedImage != null) {  
    68.                 ImageView imageView = (ImageView) view;  
    69.                 boolean firstDisplay = !displayedImages.contains(imageUri);  
    70.                 if (firstDisplay) {  
    71.                     FadeInBitmapDisplayer.animate(imageView, 500);  
    72.                     displayedImages.add(imageUri);  
    73.                 }  
    74.             }  
    75.         }  
    76.     }  
    77. }  



    这是一个demo,这个图片选项最好配置成一个单列类,便于管理和减少内存的溢出。

  • 相关阅读:
    Oracle 10g 体系结构及安全管理
    Oracle 10g数据库概述
    jQuery Ajax应用
    ASP.NET Ajax核心对象
    ASP.NET XML
    jQuery插件的使用和编写
    jQuery中的Ajax应用
    弹窗下面的页面滚动问题
    报文过长,华为手机自动拦截报文
    手机抓包 配置步骤
  • 原文地址:https://www.cnblogs.com/exmyth/p/4503811.html
Copyright © 2011-2022 走看看