Android-Universal-Image-Loader-master 详解

Android-Universal-Image-Loader-master 使用
下载地址:https://github.com/nostra13/Android-Universal-Image-Loader
步骤:
   1)、先要配置ImageLoaderConfiguration这个类实现全局ImageLoader的实现情况,
           可知Application中配置。
           
           // This configuration tuning is custom. You can tune every option, you may tune some of them,
        // or you can create default configuration by
        //  ImageLoaderConfiguration.createDefault(this);
        // method.
        ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
        config.threadPriority(Thread.NORM_PRIORITY - 2);
        config.denyCacheImageMultipleSizesInMemory();
        config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
        config.tasksProcessingOrder(QueueProcessingType.LIFO);
        config.writeDebugLogs(); // Remove for release app

注:更多配置项到ImageLoaderConfiguration.Builder中查看。
    
    2)、初始化全局配置
        // Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(config.build());
    
    3)、初始化显示图片格式DisplayImageOptions的设置
        DisplayImageOptions options = new DisplayImageOptions.Builder()
        .showImageOnLoading(R.drawable.ic_stub)
        .showImageForEmptyUri(R.drawable.ic_empty)
        .showImageOnFail(R.drawable.ic_error)
        .cacheInMemory(true)
        .cacheOnDisk(true)
        .considerExifParams(true)
        .displayer(new RoundedBitmapDisplayer(20))
        .build();
    4)、加载图片到控件上
       ImageLoader.getInstance().displayImage(imageUrls[position], holder.image, options,null);
          注:displayImage此方法有多个重载形式,根据情况选择其一。
    5)实例:
        5.1)配置全局参数并初始化:
          /*******************************************************************************
            public class UILApplication extends Application {
                @TargetApi(Build.VERSION_CODES.GINGERBREAD)
                @SuppressWarnings("unused")
                @Override
                public void onCreate() {
                    if (Constants.Config.DEVELOPER_MODE && Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
                        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyDialog().build());
                        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath().build());
                    }
            
                    super.onCreate();
            
                    initImageLoader(getApplicationContext());
                }
            
                //初始化ImageLoader全局配置
                public static void initImageLoader(Context context) {
                    // This configuration tuning is custom. You can tune every option, you may tune some of them,
                    // or you can create default configuration by
                    //  ImageLoaderConfiguration.createDefault(this);
                    // method.
                    ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
                    config.threadPriority(Thread.NORM_PRIORITY - 2);
                    config.denyCacheImageMultipleSizesInMemory();
                    config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
                    config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
                    config.tasksProcessingOrder(QueueProcessingType.LIFO);
                    config.writeDebugLogs(); // Remove for release app
            
                    // Initialize ImageLoader with configuration.
                    ImageLoader.getInstance().init(config.build());
                }
            }
        5.2)、
        
        public class MyActivity extends Activity {
        
            private LayoutInflater inflater;
            private DisplayImageOptions options;
            private ListView listView;
            String[] imageUrls = Constants.IMAGES;
            
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.fr_image_list);
                inflater=LayoutInflater.from(this);
                init();
                
                listView= (ListView) findViewById(android.R.id.list);
                listView.setAdapter(new MyBaseAdapter());
            }
            
            private class MyBaseAdapter extends BaseAdapter{
        
                @Override
                public int getCount() {
                    return imageUrls.length;
                }
        
                @Override
                public Object getItem(int position) {
                    return imageUrls[position];
                }
        
                @Override
                public long getItemId(int position) {
                    return position;
                }
        
                @Override
                public View getView(int position, View convertView, ViewGroup parent) {
                    View view=convertView;
                    ViewHolder holder;
                    if(convertView==null){
                        holder=new ViewHolder();
                        view = inflater.inflate(R.layout.item_list_image, parent, false);
                        holder.image = (ImageView) view.findViewById(R.id.image);
                        holder.text = (TextView) view.findViewById(R.id.text);
                        view.setTag(holder);
                    }else{
                        holder=(ViewHolder) view.getTag();
                    }
                    holder.text.setText("Item " + (position + 1));
                    //实例化ImageLoader并加载图片
                    ImageLoader.getInstance().displayImage(imageUrls[position], holder.image, options,null);
        
                    return view;
                }
            }
            
            //view缓存对象
            private static class ViewHolder {
                TextView text;
                ImageView image;
            }
        
            private void init() {
                options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.ic_stub)
                .showImageForEmptyUri(R.drawable.ic_empty)
                .showImageOnFail(R.drawable.ic_error)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .considerExifParams(true)
                .displayer(new RoundedBitmapDisplayer(20))
                .build();
            }
        }

时间: 2024-08-09 00:30:46

Android-Universal-Image-Loader-master 详解的相关文章

Android Universal Image Loader 使用

1. 功能介绍 1.1 Android Universal Image Loader Android Universal Image Loader 是一个强大的.可高度定制的图片缓存,本文简称为UIL. 简单的说 UIL 就做了一件事--获取图片并显示在相应的控件上. 1.2 基本使用 1.2.1 初始化 添加完依赖后在Application或Activity中初始化ImageLoader,如下: public class YourApplication extends Application

Android App优化之ANR详解

引言 背景:Android App优化, 要怎么做? Android App优化之性能分析工具 Android App优化之提升你的App启动速度之理论基础 Android App优化之提升你的App启动速度之实例挑战 Android App优化之Layout怎么摆 Android App优化之ANR详解 Android App优化之消除卡顿 Android App优化之内存优化 Android App优化之持久电量 Android App优化之如何高效网络请求 App优化系列已近中期, 前面分

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节

Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)

1 背景 还记得前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>中关于透过源码继续进阶实例验证模块中存在的点击Button却触发了LinearLayout的事件疑惑吗?当时说了,在那一篇咱们只讨论View的触摸事件派发机制,这个疑惑留在了这一篇解释,也就是ViewGroup的事件派发机制. PS:阅读本篇前建议先查看前一篇<Android触摸屏事件派发机制详解与源码分析一(View篇)>,这一篇承接上一篇. 关于View与ViewGroup的区别在前一篇的A

Android APK优化工具Zipalign详解

最近在googl play上发布apk要优化 Android SDK中包含一个"zipalign"的工具,它能够对打包的应用程序进行优化.在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率.因此,这种方式能够让应用程序和整个系统运行得更快.我们强烈推荐在新的和已经发布的程序上使用zipalign工具来得到优化后的版本 一.这里下载android SDK,只为了用他的zipalign工具,当然什么时候大家有兴趣了用来开发两个小程序也是很简单的 A

Android触摸屏事件派发机制详解与源码分析

请看下面三篇博客,思路还是蛮清晰的,不过还是没写自定义控件系列哥们的思路清晰: Android触摸屏事件派发机制详解与源码分析一(View篇) http://blog.csdn.net/yanbober/article/details/45887547 Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇) http://blog.csdn.net/yanbober/article/details/45912661 Android触摸屏事件派发机制详解与源码分析三(Activi

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android开发之通知栏Notification详解

Notification的用法  --- 状态栏通知 发送一个状态栏通知必须的两个类: 1. NotificationManager   --- 状态栏通知的管理类,负责发通知,清除通知等 NotificationManager : 是一个系统Service,必须通过 context.getSystemService(NOTIFICATION_SERVICE)方法获取 NotificationManager notificationManager = (NotificationManager)

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

Android Touch事件传递机制详解 上

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/37961997 最近总是遇到关于Android Touch事件的问题,如:滑动冲突的问题,以前也花时间学习过Android Touch事件的传递机制,可以每次用起来的时候总是忘记了,索性自己总结一下写篇文章避免以后忘记了,其实网上关于Touch事件的传递的文章真的很多,但是很少有系统性的,都是写了一个简单的demo运行了一下,对于我们了解Android Touch事件基本上没有任何帮助. 今