• ImageLoader简单使用


    效果图就是一个从网络加载的图片;在加载的时候图片的中间显示一个进度条                   

    数据是随便找的一个网络图片的地址

       导入jar包universal-image-loader-1.9.5 用来展示商品使用    在使用 ImageLoader应加入

       ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));不然会报

       java.lang.IllegalStateException: ImageLoader must be init with configuration before using字面意思是在使用前要初始化

    如下是代码

    package com.itm.jiejie.activity;
    
    import com.itm.jiejie.R;
    import com.nostra13.universalimageloader.core.DisplayImageOptions;
    import com.nostra13.universalimageloader.core.ImageLoader;
    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
    import com.nostra13.universalimageloader.core.assist.FailReason;
    import com.nostra13.universalimageloader.core.assist.ImageScaleType;
    import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
    import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    
    /**
     * ImageLoder的使用
     * 
     * @author Administrator
     * 
     */
    public class ImageLoaderActivity extends Activity {
        private ImageView img_loadView;
        private ProgressBar progressBar;
        /** 图片的网络地址 */
        private String urlString = "http://image.tianjimedia.com/uploadImages/2012/067/N80N0GUA36N0.jpg";
        
        private ImageLoader imageLoader = ImageLoader.getInstance();
        private DisplayImageOptions options;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_imageload);
            img_loadView = (ImageView) findViewById(R.id.img_load);
            progressBar = (ProgressBar)findViewById(R.id.pb_loading);
            /**
             * 下面这2个应该用个工具类封装下,方便调用
             */
            imageLoader.init(ImageLoaderConfiguration.createDefault(this));
            options = new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.ic_launcher)//设置图片URL为空或是错误的时候显示图片
            .showImageOnFail(R.drawable.ic_error)//image加载失败或解码过程错误显示的图片
            .resetViewBeforeLoading(true)//设置下载的图片下载前是否重置,复位
            .cacheInMemory(true)//设置下载图片是否缓存到内存      
            .imageScaleType(ImageScaleType.EXACTLY)
            .bitmapConfig(Bitmap.Config.RGB_565)//设置图片解码类型
            .displayer(new FadeInBitmapDisplayer(300))//设置用户加载图片的task(这里是渐现)
            .build();
            
            //imageLoader.displayImage(urlString, img_loadView,options);
            imageLoader.displayImage(urlString, img_loadView,options,new MySimpleLoading(progressBar));
        }
        
        /**
         * ImageLoder 开始加载的监听
         * @author Administrator
         *
         */
        private class MySimpleLoading extends SimpleImageLoadingListener{
            private ProgressBar mBar;
    
            public MySimpleLoading(ProgressBar mBar) {
                super();
                this.mBar = mBar;
            }
            //开始加载
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                // TODO Auto-generated method stub
                super.onLoadingStarted(imageUri, view);
                mBar.setVisibility(View.VISIBLE);
            }
            @Override
            public void onLoadingFailed(String imageUri, View view,
                    FailReason failReason) {
                // TODO Auto-generated method stub
                String message = null;
                switch (failReason.getType()) {
                case IO_ERROR:
                    message = "Input/Output error";
                    break;
                case DECODING_ERROR:
                    message = "Image can't be decoded";
                    break;
                case NETWORK_DENIED:
                    message = "Downloads are denied";
                    break;
                case OUT_OF_MEMORY:
                    message = "Out Of Memory error";
                    break;
                case UNKNOWN:
                    message = "Unknown error";
                    break;
                }
                System.out.println(message);
                mBar.setVisibility(View.GONE);
            }
            @Override
            public void onLoadingComplete(String imageUri, View view,
                    Bitmap loadedImage) {
                // TODO Auto-generated method stub
                super.onLoadingComplete(imageUri, view, loadedImage);
                mBar.setVisibility(View.GONE);
                System.out.println(imageUri);
            }
        }
          /**
         * 清除内存缓存
         */
        public void clearMemoryCache() {
            imageLoader.clearMemoryCache();
        }
    }

     如下是一个封装好的ImageLoader的工具类,在项目中可以直接调用

    package com.xiaolijuan.swiperefreshlayoutdome.utils;
    
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.widget.ImageView;
    import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
    import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
    import com.nostra13.universalimageloader.core.DisplayImageOptions;
    import com.nostra13.universalimageloader.core.ImageLoader;
    import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
    import com.nostra13.universalimageloader.core.assist.ImageScaleType;
    import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
    import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
    import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
    import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
    
    /**
     * 初始化UniverImageLoader,并用来加载网络图片
     * Created by jiejie.
     */
    
    public class ImageLoaderUtil {
        private static final int THREAD_COUNT = 2;
        private static final int PRIORITY = 2;
        private static final int DISK_CACHE_SIZE = 50 * 1024 * 1024;
        private static final int CONNECTION_TIME_OUT = 5 * 1000;
        private static final int READ_TIME_OUT = 30 * 1000;
    
        private static  ImageLoaderUtil mInstance = null;
        private static ImageLoader mLoader = null;
    
        public static ImageLoaderUtil getInstance(Context context){
            if(mInstance == null){
                synchronized (ImageLoaderUtil.class){
                    if(mInstance == null){
                        mInstance = new ImageLoaderUtil(context);
                    }
                }
            }
            return mInstance;
        }
    
        /**
         * 私有构造方法完成初始化工作
         * @param context
         */
        private ImageLoaderUtil(Context context){
            ImageLoaderConfiguration config = new ImageLoaderConfiguration
                    .Builder(context)
                    .threadPoolSize(THREAD_COUNT)
                    .threadPriority(Thread.NORM_PRIORITY - PRIORITY)
                    .denyCacheImageMultipleSizesInMemory()
                    .memoryCache(new WeakMemoryCache())
                    .diskCacheSize(DISK_CACHE_SIZE)
                    .diskCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候URL加密
                    .tasksProcessingOrder(QueueProcessingType.LIFO)
                    .defaultDisplayImageOptions(getDefaultOptions())
                    .imageDownloader(new BaseImageDownloader(context,CONNECTION_TIME_OUT,READ_TIME_OUT))
                    .build();
            ImageLoader.getInstance().init(config);
            mLoader = ImageLoader.getInstance();
        }
    
        /**
         * 默认的图片显示Options,可设置图片的缓存策略,编解码方式等,非常重要
         *
         * @return
         */
        private DisplayImageOptions getDefaultOptions() {
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .cacheInMemory(true)//设置下载的图片是否缓存在内存中, 重要,否则图片不会缓存到内存中
                    .cacheOnDisk(true)//设置下载的图片是否缓存在SD卡中, 重要,否则图片不会缓存到硬盘中
                    .considerExifParams(true)  //是否考虑JPEG图像EXIF参数(旋转,翻转)
                    .imageScaleType(ImageScaleType.IN_SAMPLE_INT)//设置图片以如何的编码方式显示
                    .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型//
                    .decodingOptions(new BitmapFactory.Options())//设置图片的解码配置
                    .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
                    .displayer(new FadeInBitmapDisplayer(300))//设置加载图片的task(这里是渐现)
                    .build();
            return options;
        }
    
        /**
         * Load the image
         * @param imageView
         * @param path
         * @param listener
         * @param option
         */
        public void displayImage(ImageView imageView, String path, ImageLoadingListener listener,DisplayImageOptions option){
            if(mLoader != null){
                mLoader.displayImage(path,imageView,listener);
            }
        }
        //load the image
        public void displayImage(ImageView imageView, String path, ImageLoadingListener listener) {
            if (mLoader != null) {
                mLoader.displayImage(path, imageView, listener);
            }
        }
    
        public void displayImage(ImageView imageView, String path) {
            displayImage(imageView, path, null);
        }
    }
    
    
  • 相关阅读:
    手机端适配rem代码片段
    location记录<18.7.21>
    本地储存(localStorage)记录
    为什么size_t重要?(Why size_t matters)(转)
    Mac OS X 完全卸载MySQL
    ECMAScript6兼容性
    mac截屏
    javascript中array的map方法的使用
    Jquery对话框基本配置
    angular中封装fancyBox(图片预览)
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5124924.html
Copyright © 2020-2023  润新知