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,这个图片选项最好配置成一个单列类,便于管理和减少内存的溢出。

  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/exmyth/p/4503811.html
Copyright © 2011-2022 走看看