精华内容
下载资源
问答
  • 安卓 图片加载框架

    2014-11-11 11:17:40
    安卓 图片加载框架 包括列表 网格布局 画廊等加载网络图片数据 比较流畅的 现在分享给大家!
  • 安卓图片加载框架

    2019-01-18 00:42:16
    快速加载。。快速解决图片缓存问题以及图片的操作等等
  • picasso是Square公司开源的一个安卓图片加载框架,可以实现图片下载和缓存功能。picasso解决了adapter加载不在视野范围的ImageView图片资源导致图片错位的错误,同时它使用了复杂的图片压缩转换来尽可能的减少内存...
  • glide4.0是最新的谷歌提供的安卓加载图片的jar包,功能强大,使用方便。
  • 前言 图片加载在 Android开发项目中非常常见... 对比现今主流的图片加载框架。 目录 图片加载开源库.jpg 1. 主流的图片加载库-介绍 从Github上的Star数排序来看,现在主流的Android图片加载库有 Universal-...

    前言

    图片加载在 Android开发项目中非常常见,为了降低开发周期和难度,我们经常会选用一些图片加载的开源库,而现在图片加载开源库越来越多,我们应该选用哪种呢?今天我就给大家分别介绍 & 对比现今主流的图片加载框架。


    目录

    图片加载开源库.jpg


    1. 主流的图片加载库-介绍

    从Github上的Star数排序来看,现在主流的Android图片加载库有

    • Universal-Image-Loader
    • Picasso
    • Fresco
    • Glide

    下面是简单的介绍

    图片加载库-介绍


    2. 图片加载库- 对比

    一图让你了解全部的图片加载库和他们之间的区别!

    图片加载库- 对比


    3. 各个主流图片加载库的Github地址

    •  

    UniversalImageLoader

     

    展开全文
  • Fresco中文官网:https://www.fresco-cn.org/ Fresco是Facebook开发的一款开源框架 号称目前最强的Android图片加载库在内存方面表现的极为优秀 支持Android2.3及以后的版本 首先先上一组加载图片的代码,不加...


    Fresco中文官网:https://www.fresco-cn.org/
    Fresco是Facebook开发的一款开源框架 号称目前最强的Android图片加载库在内存方面表现的极为优秀
    支持Android2.3及以后的版本
    首先先上一组加载图片的代码,不加任何修饰
    依赖:implementation 'com.facebook.fresco:fresco:0.12.0'
    支持动态图的依赖:implementation 'com.facebook.fresco:animated-gif:0.12.0'
    创建一个初始化类 并在清单文件中初始化
    public class App extends Application {
    @Override
    public void onCreate() {
    super.onCreate();
    Fresco.initialize(this);
    }
    }

    在xml里面加入命名空间
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent">
    在命名空间里面加入
    <com.facebook.drawee.view.SimpleDraweeView
    android:layout_width="400dp"
    android:layout_height="match_parent"
    android:id="@+id/ima"
    fresco:placeholderImage="@mipmap/ic_launcher"/>
    MainActivity里面 加载图片 fresco不支持相对路径的URL只支持绝对路径
    Uri uri = Uri.parse("http://dynamic-image.yesky.com/740x-/uploadImages/2015/163/50/690V3VHW0P77.jpg");
    SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.ima);
    DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setUri(uri)
    .setAutoPlayAnimations(true)
    .build();
    draweeView.setController(controller);

    简单的加载图片的代码写完了 最后别忘记添加网络权限啊

    下面是一些在xml里面添加的图片配置
    fresco:fadeDuration="300" // 淡入淡出的持续时间
    fresco:actualImageScaleType="focusCrop"  // 实际图像的缩放类型
    fresco:placeholderImage="@color/wait_color"  //占位图
    fresco:placeholderImageScaleType="fitCenter" //占位图的缩放类型
    fresco:failureImage="@drawable/error" //下载失败显示的图片
    fresco:failureImageScaleType="centerInside" //失败图的缩放类型
    fresco:retryImage="@drawable/retrying"
    //图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
    fresco:retryImageScaleType="centerCrop" //重新加载的图片缩放类型
    fresco:progressBarImage="@drawable/progress_bar" //进度条图片
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    //进度图自动旋转间隔时间(单位:毫秒ms)
    fresco:backgroundImage="@color/blue"
    //背景图片,这里的背景图片首先被绘制
    fresco:overlayImage="@drawable/watermark"
    // 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
    fresco:pressedStateOverlayImage="@color/red"
    // 设置点击状态下的叠加图
    fresco:roundAsCircle="false" //设置为圆形图
    fresco:roundedCornerRadius="1dp" // 圆角半径
    fresco:roundTopLeft="true" // 左上角是否为圆角
    fresco:roundTopRight="false"
    fresco:roundBottomLeft="false"
    fresco:roundBottomRight="true"
    fresco:roundWithOverlayColor="@color/corner_color"
    fresco:roundingBorderWidth="2dp" //边框的宽度
    fresco:roundingBorderColor="@color/border_color" //边框颜色

    有时候需要加载很多图片,这个时候如果网络情况不是很好的情况下,一直显示占位图,体验也不是很好,我们可以先显示一个低分辨率的图片,等到大图加载完成之后,在显示真正的图片。
    DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setLowResImageRequest(ImageRequest.fromUri(uri))
    .setImageRequest(ImageRequest.fromUri(uri))
    .setOldController(draweeView.getController())
    .build();
    draweeView.setController(controller);







    展开全文
  • UIL旨在为图像加载,缓存和显示提供强大,灵活和高度可定制的工具。 它提供了大量的配置选项和良好的控制图像加载和缓存过程。 特性: ☆ 多线程图像加载(异步或同步); ☆ ImageLoader配置的广泛定制(线程...

    ◆ImageLoader

    概述

    UIL旨在为图像加载,缓存和显示提供强大,灵活和高度可定制的工具。 它提供了大量的配置选项和良好的控制图像加载和缓存过程。

    特性:

    ☆  多线程图像加载(异步或同步);

    ☆  ImageLoader配置的广泛定制(线程执行器,下载器,解码器,内存和磁盘缓存,显示图像选项等)。

    ☆  每个显示图像调用的许多自定义选项(存根图像,缓存开关,解码选项,位图处理和显示等);

    ☆  内存和/或磁盘上的图像缓存(设备的文件系统或SD卡);

    ☆  监听加载过程(包括下载进度);

    支持URI:

    "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)

    代码部分

    项目中使用Universal-Image-Loader:

    S1.导入jar包或添加依赖;

        universal-image-loader-1.9.5.jar

        compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

    S2.添加访问权限:

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

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

    S3.初始化/配置:

        ImageLoaderConfiguration configuration = ImageLoaderConfiguration

                    .createDefault(this);

        ImageLoader.getInstance().init(configuration);

    主要方法:

    // 配置/初始化
    File cacheDir = StorageUtils.getCacheDirectory(this);
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
    	.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 缓存最大图片大小
    	.diskCacheExtraOptions(480, 800, null) // 闪存最大图片大小
    	.threadPoolSize(3) // default 最大线程数
    	.threadPriority(Thread.NORM_PRIORITY - 2) // default 线程优先级
    	.tasksProcessingOrder(QueueProcessingType.FIFO) // default 线程处理队列,先进先出
    	.denyCacheImageMultipleSizesInMemory()
    	.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) // LruMemory
    	.memoryCacheSize(2 * 1024 * 1024) // 缓存
    	.memoryCacheSizePercentage(13)    // default 缓存比例?
    	.diskCache(new UnlimitedDiskCache(cacheDir)) // default 闪存缓存
    	.diskCacheSize(50 * 1024 * 1024) // 闪存缓存大小
    	.diskCacheFileCount(100) // 闪存缓存图片文件数量
    	//                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
    	.diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default 文件名
    	.imageDownloader(new BaseImageDownloader(this)) // default
    	.imageDecoder(new BaseImageDecoder(true)) // default
    	.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
    	.writeDebugLogs() // LOG
    	.build();
    ImageLoader.getInstance().init(config);
    // 加载图片
    DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageOnLoading(R.drawable.ic_stub) // resource or drawable
            .showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable
            .showImageOnFail(R.drawable.ic_error) // resource or drawable
            .resetViewBeforeLoading(false)  // default
            .delayBeforeLoading(1000)
            .cacheInMemory(false) // default
            .cacheOnDisk(false) // default
            .preProcessor(...)
            .postProcessor(...)
            .extraForDownloader(...)
            .considerExifParams(false) // default
            .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
            .bitmapConfig(Bitmap.Config.ARGB_8888) // default
            .decodingOptions(...)
            .displayer(new SimpleBitmapDisplayer()) // default
            .handler(new Handler()) // default
            .build();
    ImageLoader.getInstance().displayImage(imageUrl, imageView);
    ImageLoader.getInstance().displayImage(imageUrl, imageView,options);
    ImageLoader.getInstance().displayImage(imageUrl, imageView, options, listener);
    new ImageLoadingListener() {
    	@Override
    	public void onLoadingStarted(String s, View view) {
    	}
    	
    	@Override
    	public void onLoadingFailed(String s, View view, FailReason failReason) {
    	}
    	
    	@Override
    	public void onLoadingComplete(String s, View view, Bitmap bitmap) {
    	}
    	
    	@Override
    	public void onLoadingCancelled(String s, View view) {
    	}
    })
    

      

    参考:

        nostra13/Android-Universal-Image-Loader github

        WIKI

        博客

        Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置) 详细

        Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 参考

    转载于:https://www.cnblogs.com/zhen-android/p/6906613.html

    展开全文
  • 最近在学习张鸿洋的写的图片加载框架:http://blog.csdn.net/lmj623565791/article/details/41874561,受益颇多,自己再按照理解,打了一遍,在图片加载那块,原生博客已写得很清楚,这里就不说了,这里主要写自己...

    最近在学习张鸿洋的写的图片加载框架:http://blog.csdn.net/lmj623565791/article/details/41874561,受益颇多,自己再按照理解,打了一遍,在图片加载那块,原生博客已写得很清楚,这里就不说了,这里主要写自己在读代码时遇到的问题,分别是Loop线程的Handler和UIHandler两个之间的区分;线程池和信号量的使用。

    安卓系统本身有一个管理UI线程的Loop,如果我们没有把Handler写在Thread线程里的话,那么它发送的消息都会被这个Loop管理,就好像这个UIHandler。但如果把Handler单独写在Thread里的话,就必须要有Loop.prepare()和Loop.loop()语句,否则会报错。

    代码如下:


            //创建轮询线程
            mPoolThread = new Thread() {
                @Override
                public void run() {
                    Looper.prepare();
                    //处理轮询消息
                    mPoolThreadHandler = new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            Log.i("Luo", "excute Task " +  count);
                            // 线程池去取出一个任务执行
                            mThreadPool.execute(getThreadTask());
                            try {
                                //信号量-1
                                mSemaphoreThreadPool.acquire();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    };
                    Looper.loop();
                }
            };
            mPoolThread.start();

    只要是mPoolThreadHandler发送的消息就不会被系统的UI线程接收,因为是两个不同的消息队列。

    接下来简单说说线程池和信号量的使用,其实自己前段时间有去仔细地了解过线程池的使用,但没有了解过信号量的使用,这个知识点终于把以前学到的操作系统知识给用到了,开心下。

    // 创建线程池
            mThreadPool = Executors.newFixedThreadPool(threadCount);
            // 创建任务队列,这个任务队列是为了暂时储存线程,等线程池里的某个线程执行完,信息量就会通知Loop继续执行取出的线程,这时是由Loop线程里的Handler完成
            mTaskQueue = new LinkedList<Runnable>();
            //创建信息量,这个信号量是为了让Loop的执行不要太快,一次只要threadCount来;信号量一开始为threadCount,执行一次,减一,<=0时停止执行
            mSemaphoreThreadPool = new Semaphore(threadCount);

    信号量在执行完线程时,必须释放资源,否则其它线程无法执行:

    mSemaphoreThreadPool.release();


    展开全文
  • 转自:http://blog.csdn.net/guolin_blog/article/details/53759439gilde 依赖:compile 'com.github.bumptech.glide:glide:3.7.0' 加载图片只需要一行核心代码: Glide.with(this).load(URl).into(imageView);...
  • 今天来介绍图片加载框架Android-Universal-Image-Loader  GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader  也可以自行百度下载。  首先来封装的一个类CacheTool ,由于...
  • 安卓开发中的图片加载框架Glide 案例源码
  • afinal框架实现图片的简单异步缓存加载.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Picasso介绍 Picasso是Square公司开源的一个Android图形缓存库 A powerful image ...Picasso实现了图片的异步加载,并解决了Android中加载图片时常见的一些问题,它有以下特点: 在Adapter中取消了不在视图...
  • 图片网络二级缓存框架源码.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 1. 图片存储在安卓系统的匿名共享内存, 而不是虚拟机的堆内存中, 图片的中间缓冲数据也存放在本地堆内存, 所以, 应用程序有更多的内存使用,不会因为图片加载而导致oom, 同时也减少垃圾回收器频繁调用回收Bitmap导致...
  • 安卓开发系列 -- APP 开源框架】图片加载框架 Glide -- 基本加载流程 【1】Glide的基本使用示例 Glide.with(context).load(url).into(imageView); 【2】Glide基本加载流程 -- with public class Glide ...
  • 从内存缓存中取数据时,不像一般的实现用 get,而是用 remove,再将这个缓存数据放到一个 value 为软引用的 activeResources map 中,并计数引用数,在图片加载完成后进行判断,如果引用计数为空则回收掉。...
  • 引用开源框架通过AsyncHttpClient实现网络图片查看器.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • Glide图形加载框架 Glide 是一个快速高效的Android图片加载库,可以自动加载网络、本地文件、app资源中的图片,注重于平滑的滚动 一、Glide的基本使用 1.导入依赖 implementation '...
  • 转载:https://www.cnblogs.com/guanmanman/p/6922678.html https://www.cnblogs.com/zgqys1980/p/5286208.html 两者足够详细,已经不需要我过多赘述。。。
  • 自己集成的依赖地址(github):github  这两天一直在用glide图片框架做demo,慢慢的感受到glide图片框架的强大,...这两行代码便实现使用glide框架加载图片转换为圆形和圆角了,因为是自己已经导入依赖,所
  • Volley框架二次封装,实现了带Cookie的Get和Post请求,图片加载和图片缓存(内存缓存,SD缓存,内存SD双缓存.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 1.添加依赖 compile ...2.添加权限 3.UIL 框架配置 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate();...
  • 安卓Glide引入: // Glide 库 implementation 'com.github.bumptech.glide:glide:3.7.0' // Glide 高斯模糊库 implementation 'jp.wasabeef:glide-transformations:2.0.1' 网络访问权限: &lt;uses-...
  • Fresco 是Facebook开源的安卓上的图片加载框架,也可以说是至今为止安卓上最强大的图片加载框架. 相对于其他几个图片加载框架,Fresco主要的优点在于更好的内存管理和更强大的功能,更便捷的使用,缺点则是体积比较大,...
  • Image-Loader,讲解了它的使用,并分别从图片三级缓存的角度和缓存Lru算法角度详细分析了源码,还给大家做出了总结,不清楚的可以去 安卓面试系列–Universal-Image-Loader图片加载框架安卓面试系列–OOM异常(二...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 326
精华内容 130
关键字:

安卓图片加载框架