ImageLoader的使用

来源:互联网 发布:java中double类型运算 编辑:程序博客网 时间:2024/04/29 17:24

导入JAR包
这里写图片描述

/**
*全局变量下的使用:
*/
MyApplication代码:

import java.io.File;import com.example.imageloadertest.R;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;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.display.RoundedBitmapDisplayer;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;import android.app.Application;import android.graphics.Bitmap;import android.os.Environment;public class MyApplication extends Application {    @Override    public void onCreate() {        // TODO Auto-generated method stub        super.onCreate();        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(                this)                .memoryCacheExtraOptions(480, 800)                .threadPoolSize(3)                // 1-5                // 线程池内加载的数量                .threadPriority(Thread.NORM_PRIORITY - 2)                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))                // You can pass your own memory cache                // implementation/你可以通过自己的内存缓存实现                .memoryCacheSize(2 * 1024 * 1024)                .discCacheSize(50 * 1024 * 1024)                .discCacheFileNameGenerator(new Md5FileNameGenerator())                // 将保存的时候的URI名称用MD5 加密                .tasksProcessingOrder(QueueProcessingType.LIFO)                .discCacheFileCount(100)                // 缓存的文件数量                .discCache(                        new UnlimitedDiscCache(new File(Environment                                .getExternalStorageDirectory() + "/myApp/img")))                // 自定义缓存路径                // 如果设置ImageLoader的配置为全局配置的话,在构造ImageLoader实例化对象的时候,需要ImageLoaderConfiguration中                // 通过下面的这个方法,来设置全局的配置,在调用imageLoader的.displayImage时使用3个参数的方法即可,不设置为全局的配置                // 则需要的使用的地方,进行局部的配置设置,使用4个参数的displayImage()方法                // 参数类型为,DisplayImageOptions                .defaultDisplayImageOptions(options())                .imageDownloader(                        new BaseImageDownloader(this, 5 * 1000, 30 * 1000))                .writeDebugLogs() // Remove for release app                .build();// 开始构建        // 创建ImageLoader的实例化对象        ImageLoader.getInstance().init(config);    }    private DisplayImageOptions options() {        DisplayImageOptions options;        options = new DisplayImageOptions.Builder()                .showImageOnFail(R.drawable.ic_launcher) // 设置图片下载失败默认                .showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空的时候显示的图片                .showImageOnLoading(R.drawable.ic_launcher)// 下载中                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中                .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位                .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少                .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间                .build();// 构建完成        return options;    }}

MainActivity代码

public class MainActivity extends Activity {    private ListView lv;    List<Result> list;    VO vo;    ImageLoader loader = ImageLoader.getInstance();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.lv);        new Thread() {            @Override            public void run() {                try {                    HttpClient client = new DefaultHttpClient();                    HttpGet get = new HttpGet(                            "http://apis.juhe.cn/catering/query?key=d90b49e59139d294875f6220633a3643&lng=121.538123&lat=31.677132&radius=2000");                    HttpResponse response = client.execute(get);                    if (response.getStatusLine().getStatusCode() == 200) {                        InputStream stream = response.getEntity().getContent();                        Gson gson = new Gson();                        vo = gson.fromJson(new InputStreamReader(stream,                                "UTF-8"), new TypeToken<VO>() {                        }.getType());                        // list = vo.result;                        Log.i("TAG", vo.toString());                        Message message = handler.obtainMessage(1, vo);                        handler.sendMessage(message);                    }                } catch (ClientProtocolException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }.start();    }    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 1) {                vo = (VO) msg.obj;                // 全局变量                // MyAdapter adapter = new MyAdapter(MainActivity.this,                // vo.result);                lv.setAdapter(adapter);            }        }    };}

MyAdapter代码

public class MyAdapter extends BaseAdapter {    private Context context;    private List<Result> list;    private ImageLoader loader = ImageLoader.getInstance();    static private List<String> urlList = Collections            .synchronizedList(new LinkedList<String>());;    public MyAdapter(Context context, List<Result> list) {        super();        this.context = context;        this.list = list;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list.size();    }    @Override    public Object getItem(int arg0) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int arg0) {        // TODO Auto-generated method stub        return 0;    }    @Override    public View getView(int arg0, View view, ViewGroup arg2) {        view = LayoutInflater.from(context).inflate(R.layout.item_layout, null);        TextView title = (TextView) view.findViewById(R.id.title);        TextView price = (TextView) view.findViewById(R.id.price_show);        ImageView img = (ImageView) view.findViewById(R.id.photo_show);        title.setText(list.get(arg0).name);        price.setText(list.get(arg0).address);        // 全局加载 (一)         loader.displayImage(list.get(arg0).photos, img);        /**         * 全局加载 (二)         */        loader.displayImage(list.get(arg0).photos, img,                new ImageLoadingListener() {                    @Override                    public void onLoadingStarted(String arg0, View arg1) {                    }                    @Override                    public void onLoadingFailed(String arg0, View arg1,                            FailReason arg2) {                        if (arg2 != null) {                            boolean urlBoolean = urlList.contains(arg0);                            if (!urlBoolean) {                                urlList.add(arg0);                            }                        }                    }                    @Override                    public void onLoadingComplete(String arg0, View arg1,                            Bitmap arg2) {                    }                    @Override                    public void onLoadingCancelled(String arg0, View arg1) {                    }                });                return view;    }}

/**
*局部变量下的使用
**/

public class MyApplication extends Application {    @Override    public void onCreate() {        // TODO Auto-generated method stub        super.onCreate();        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(                this)                .memoryCacheExtraOptions(480, 800)                .threadPoolSize(3)                // 1-5                // 线程池内加载的数量                .threadPriority(Thread.NORM_PRIORITY - 2)                .denyCacheImageMultipleSizesInMemory()                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))                // You can pass your own memory cache                // implementation/你可以通过自己的内存缓存实现                .memoryCacheSize(2 * 1024 * 1024)                .discCacheSize(50 * 1024 * 1024)                .discCacheFileNameGenerator(new Md5FileNameGenerator())                // 将保存的时候的URI名称用MD5 加密                .tasksProcessingOrder(QueueProcessingType.LIFO)                .discCacheFileCount(100)                // 缓存的文件数量                .discCache(                        new UnlimitedDiscCache(new File(Environment                                .getExternalStorageDirectory() + "/myApp/img")))                // 自定义缓存路径                // 如果设置ImageLoader的配置为全局配置的话,在构造ImageLoader实例化对象的时候,需要ImageLoaderConfiguration中                // 通过下面的这个方法,来设置全局的配置,在调用imageLoader的.displayImage时使用3个参数的方法即可,不设置为全局的配置                // 则需要的使用的地方,进行局部的配置设置,使用4个参数的displayImage()方法                // 参数类型为,DisplayImageOptions                .imageDownloader(                        new BaseImageDownloader(this, 5 * 1000, 30 * 1000))                .writeDebugLogs() // Remove for release app                .build();// 开始构建        // 创建ImageLoader的实例化对象        ImageLoader.getInstance().init(config);    }}

二。mainactivity代码

public class MainActivity extends Activity {    private ListView lv;    List<Result> list;    VO vo;    ImageLoader loader = ImageLoader.getInstance();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        lv = (ListView) findViewById(R.id.lv);        new Thread() {            @Override            public void run() {                try {                    HttpClient client = new DefaultHttpClient();                    HttpGet get = new HttpGet(                            "http://apis.juhe.cn/catering/query?key=d90b49e59139d294875f6220633a3643&lng=121.538123&lat=31.677132&radius=2000");                    HttpResponse response = client.execute(get);                    if (response.getStatusLine().getStatusCode() == 200) {                        InputStream stream = response.getEntity().getContent();                        Gson gson = new Gson();                        vo = gson.fromJson(new InputStreamReader(stream,                                "UTF-8"), new TypeToken<VO>() {                        }.getType());                        // list = vo.result;                        Log.i("TAG", vo.toString());                        Message message = handler.obtainMessage(1, vo);                        handler.sendMessage(message);                    }                } catch (ClientProtocolException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }.start();    }    /**     * 局部变量     *      * @return     */    private DisplayImageOptions options() {        DisplayImageOptions options;        options = new DisplayImageOptions.Builder()                .showImageOnFail(R.drawable.ic_launcher) // 设置图片下载失败默认                .showImageForEmptyUri(R.drawable.ic_launcher)// 设置图片Uri为空的时候显示的图片                .showImageOnLoading(R.drawable.ic_launcher)// 下载中                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中                .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中                .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示                .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型//                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位                .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少                .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间                .build();// 构建完成        return options;    }    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == 1) {                vo = (VO) msg.obj;                // 局部变量                MyAdapter adapter = new MyAdapter(MainActivity.this, vo.result,options());                lv.setAdapter(adapter);            }        }    };}

MyAdapter代码

public class MyAdapter extends BaseAdapter {    private Context context;    private List<Result> list;    private ImageLoader loader = ImageLoader.getInstance();    static private List<String> urlList = Collections            .synchronizedList(new LinkedList<String>());;    private DisplayImageOptions options;    public MyAdapter(Context context, List<Result> list) {        super();        this.context = context;        this.list = list;    }    public MyAdapter(Context context, List<Result> list,            DisplayImageOptions options) {        super();        this.context = context;        this.list = list;        this.options = options;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return list.size();    }    @Override    public Object getItem(int arg0) {        // TODO Auto-generated method stub        return null;    }    @Override    public long getItemId(int arg0) {        // TODO Auto-generated method stub        return 0;    }    @Override    public View getView(int arg0, View view, ViewGroup arg2) {        view = LayoutInflater.from(context).inflate(R.layout.item_layout, null);        TextView title = (TextView) view.findViewById(R.id.title);        TextView price = (TextView) view.findViewById(R.id.price_show);        ImageView img = (ImageView) view.findViewById(R.id.photo_show);        title.setText(list.get(arg0).name);        price.setText(list.get(arg0).address);        /**         * 局部变量         */        loader.displayImage(list.get(arg0).getPhotos(), img, options,                new ImageLoadingListener() {                    @Override                    public void onLoadingStarted(String arg0, View arg1) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onLoadingFailed(String arg0, View arg1,                            FailReason arg2) {                        // TODO Auto-generated method stub                    }                    @Override                    public void onLoadingComplete(String arg0, View arg1,                            Bitmap arg2) {                        if (arg2 != null) {                            boolean urlBoolean = urlList.contains(arg0);                            if (!urlBoolean) {                                urlList.add(arg0);                            }                        }                    }                    @Override                    public void onLoadingCancelled(String arg0, View arg1) {                        // TODO Auto-generated method stub                    }                });        return view;    }}

AndroidManifest.xml配置
1、加载权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2、application设置如下

android:name="com.example.application.MyApplication"
0 0