前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ImageLoader

ImageLoader

作者头像
yuanyuan
发布2019-09-10 18:03:18
9130
发布2019-09-10 18:03:18
举报
文章被收录于专栏:小满小满

ImageLoader在github上的地址:https://github.com/nostra13/Android-Universal-Image-Loader

配置:

1.在app的buildgradle中添加以来:

代码语言:javascript
复制
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

例如:

代码语言:javascript
复制
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.android.support:support-v4:26.1.0'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    compile 'org.greenrobot:greendao:3.2.2'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
}

2.重写application,并初始化配置

代码语言:javascript
复制
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
       initImageLoader();
    }
    public void initImageLoader(){

        ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(getApplicationContext());

        config.threadPriority(Thread.NORM_PRIORITY - 2);
        config.denyCacheImageMultipleSizesInMemory();

        config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        config.diskCacheSize(50*1024*1024);
        config.tasksProcessingOrder(QueueProcessingType.LIFO);
        config.writeDebugLogs();
        ImageLoader.getInstance().init(config.build());
    }
}

3.配置AndroidManifest

将application标签的name熟悉设置为.MyApplication; 添加权限

代码语言:javascript
复制
<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
代码语言:javascript
复制
</application>
代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.应用实例:

代码语言:javascript
复制
public class MyImageListActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fr_image_list);
        ListView listView = findViewById(R.id.listview);
        listView.setAdapter(new ImageAdapter());
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Log.i("test","click "+i);
            }
        });
    }
    @Override
    protected void onDestroy() {
        //回收缓存在内存中的图片
        ImageLoader.getInstance().clearMemoryCache();
        super.onDestroy();
    }

    private class ImageAdapter extends BaseAdapter{

        private String[] IMAGES_URI = new String[]{
                "http://mowin.org/wp-content/uploads/2017/07/arborists-forestry.jpg",
                "http://s1.1zoom.me/big0/506/Sky_Grasslands_Rainbow_502473.jpg",
                 };
        // 创建DisplayImageOptions对象
        private DisplayImageOptions options;

        public ImageAdapter() {
            options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.dog)  // 下载期间显示的图片
                    .showImageForEmptyUri(R.drawable.dog)//Uri为空或是错误的时候显示的图片
                    .showImageOnFail(R.drawable.ic_launcher_background)//发生错误显示的图片
                    .cacheInMemory(true)//载的图片是否缓存在内存中
                    .cacheOnDisk(true)//载的图片是否缓存在sdcard中
                    .considerExifParams(true)
                    .displayer(new CircleBitmapDisplayer(Color.WHITE,5))//图片
                    .build();
        }

        @Override
        public int getCount() {
            return IMAGES_URI.length;
        }

        @Override
        public Object getItem(int i) {
            return IMAGES_URI[i];
        }

        @Override
        public long getItemId(int i) {
            return i;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            ViewHolder holder;
            if(view == null){
                holder = new ViewHolder();
                view = LayoutInflater.from(MyImageListActivity.this).inflate(R.layout.item_list_image,null);
                holder.imageView = (ImageView)view.findViewById(R.id.item_image);
                holder.textView = (TextView)view.findViewById(R.id.item_name);
                view.setTag(holder);
            }else{
                holder = (ViewHolder)view.getTag();
            }
            holder.textView.setText("Item " + (i + 1));
            //
            ImageLoader.getInstance().displayImage(IMAGES_URI[i],holder.imageView,options);
            return view;
        }
    }

    static  class ViewHolder{
        ImageView imageView;
        TextView textView;

    }
}

可以使用的URI:

代码语言:javascript
复制
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)
代码语言:javascript
复制
设置图片的显示方式
代码语言:javascript
复制
displayer(BitmapDisplayer displayer) 
代码语言:javascript
复制
  SimpleBitmapDisplayer() //默认 正常显示一张图片

  CircleBitmapDisplayer(Color.WHITE,5)//圆形图片
代码语言:javascript
复制
  RoundedBitmapDisplayer(20) //圆角图片,弧度20. 不推荐用
代码语言:javascript
复制
  FadeInBitmapDisplayer(100)//加载图片后渐入的时间
  FakeBitmapDisplayer()
图片压缩质量参数
bitmapConfig(Bitmap.Config.RGB_565)
在android中的大图片一般都要经过压缩才能显示,不然容易发生oom,影响一个图片占用空间的有尺寸大小 色彩细节。
代码语言:javascript
复制
public static final Bitmap.Config ALPHA_8  
public static final Bitmap.Config ARGB_4444  
public static final Bitmap.Config ARGB_8888  
public static final Bitmap.Config RGB_565  

ARGB指的是一种色彩模式,A代表Alpha,R表示red,G表示green,B表示blue。所有的可见色都是由红绿蓝组成的,所以红绿蓝又称为三原色

ALPHA_8就是Alpha由8位组成--代表8位Alpha位图

ARGB_4444就是由4个4位组成即16位--代表16位ARGB位图

ARGB_8888就是由4个8位组成即32位--代表32位ARGB位图

RGB_565就是R为5位,G为6位,B为5位共16位--代表16位RGB位图

位图位数越高代表其可以存储的颜色信息越多,当然图像也就越逼真。

bitmapConfig(Bitmap.Config.RGB_565) //使用RGB_565会比使用ARGB_8888少消耗2倍的内存

imageScaleType(ImageScaleType.IN_SAMPLE_INT) 或 imageScaleType(ImageScaleType.EXACTLY)

避免使用new RoundedBitmapDisplayer(int) //会创建新的ARGB_8888格式的Bitmap对象;

代码语言:javascript
复制
代码语言:javascript
复制
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-02-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档