• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 安卓图片加载之使用universalimageloader加载圆形圆角图片

安卓图片加载之使用universalimageloader加载圆形圆角图片

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了安卓imageloader,安卓imagebutton,安卓image,image app 安卓,安卓imageswitcher等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

安卓图片加载之使用universalimageloader加载圆形圆角图片


前言

话说这universalimageloader加载图片对搞过2年安卓程序都是用烂了再熟悉不过了,就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimageloader呢。一是因为这个东西确实是一个很不错的东西,第二让我们用imageloader来学习 加载圆形圆角图片。三呢以后项目中可能用到了直接copy。
GITHUB上的下载路径为:https://github.com/nostra13/Android-Universal-Image-Loader ,下载最新的库文件,并且导入到项目的LIB下便可以使用。该库以及DEMO本地下载链接:下载地址
效果图:
图片效果

universalimageloader的简单介绍:

处理流程

看了再也不担心会oom,然后也不需要去考率3级缓存,我们可以看出,UIL加载图片的一般流程是先判断内存中是否有对应的Bitmap,再判断磁盘(disk)中是否有,如果没有就从网络中加载。最后根据原先在UIL中的配置判断是否需要缓存Bitmap到内存或磁盘中。Bitmap加载完后,就对它进行解析,然后显示到特定的ImageView中。

universalimageloader的使用

第一步:加入库
1 .下载jar包放在libs文件夹中
2 .Maven dependency:  

    com.nostra13.universalimageloader
    universal-image-loader
    1.9.3

3 .Gradle dependency:

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
第二步:配置清单文件权限

第三步:配置ImageLoaderConfiguration参数

在应用中配置ImageLoaderConfiguration参数(只能配置一次,如多次配置,则默认第一次的配置参数)

File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽
        .diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个 
        .taskExecutor(...)
        .taskExecutorForCachedImages(...)
        .threadPoolSize(3) // default  线程池内加载的数量
        .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
        .tasksProcessingOrder(QueueProcessingType.FIFO) // default
        .denyCacheImageMultipleSizesInMemory()
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
        .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
        .memoryCacheSizePercentage(13) // default
        .diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径  
        .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
        .diskCacheFileCount(100)  // 可以缓存的文件数量 
        // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) 
        .imageDownloader(new BaseImageDownloader(context)) // default
        .imageDecoder(new BaseImageDecoder()) // default
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
         .discCache(new LimitedAgeDiscCache(cacheDir, 7 * 24 * 60 * 60))// 自定义缓存路径,7天后自动清除缓存
        .writeDebugLogs() // 打印debug log
        .build(); //开始构建  

Configuration的参数就算是配好了,当然了怎么配置随你的便,但是必须在初始化以前必须要配置,为了不进行多次配置,我们都把它放在application里面的。

第四步:初始化imageLoder

ImageLoader.getInstance().init(config); // 初始化

第五步 :imageLoder显示option的配置
 options = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.ic_stub)//缓冲过程中图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.ic_error)// 设置图片加载或解码过程中发生错误显示的图片
                .cacheInMemory(true)//缓存道内存
                .cacheOnDisc(true)//缓存到硬盘
                .bitmapConfig(Bitmap.Config.ARGB_8888)   //设置图片的解码类型

                .build();

上段代码我们设置了加载显示过程中的图片处理,和缓存处理。

然后使用ImageLoader.getInstance().displayImage(url,imagview,options);
我们通过设置 .displayer属性来产生各种图片形状。

universalimageloader加载圆形图片

所以呢我们这里来了一个自定义圆形显示控件:

import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;

import com.nostra13.universalimageloader.core.assist.LoadedFrom;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.imageaware.ImageAware;

/**
 * Created by zengyu on 2016/3/2.
 */

public class Displayer extends RoundedBitmapDisplayer {
    public Displayer(int cornerRadiusPixels) {
        super(cornerRadiusPixels);
    }
    // 显示位图
    @Override
    public void display(Bitmap bitmap, ImageAware imageAware,
                        LoadedFrom loadedFrom) {
        imageAware.setImageDrawable(new CircleDrawable(bitmap, margin));
    }

    public static class CircleDrawable extends Drawable {
        private final int margin;
        private final RectF mRect = new RectF();
        private final BitmapShader bitmapShader;
        private final Paint paint;
        private RectF mBitmapRect;

        public CircleDrawable(Bitmap bitmap, int margin) {
            this.margin = 0;
            // 创建着色器
            bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,
                    Shader.TileMode.CLAMP);
            mBitmapRect = new RectF(margin, margin, bitmap.getWidth() - margin,
                    bitmap.getHeight() - margin);
            // 设置画笔
            paint = new Paint();
            paint.setAntiAlias(true);
            paint.setShader(bitmapShader);
        }

        // 画圆,覆盖原来的位图
        @Override
        protected void onBoundsChange(Rect bounds) {
            super.onBoundsChange(bounds);
            mRect.set(margin, margin, bounds.width() - margin, bounds.height()
                    - margin);

            // 调整位图,设置该矩阵,转换映射源矩形和目的矩形
            Matrix shaderMatrix = new Matrix();
            shaderMatrix.setRectToRect(mBitmapRect, mRect,
                    Matrix.ScaleToFit.FILL);
            // 设置着色器矩阵
            bitmapShader.setLocalMatrix(shaderMatrix);
        }

        // 画出其边界(通过设置的setBounds)
        @Override
        public void draw(Canvas canvas) {
            canvas.drawRoundRect(mRect, mRect.width()/2 , mRect.height()/2,
                    paint);
        }

        /**
         * 返回此绘制对象的不透明度/透明度 ,返回的值是抽象的格式常数的PixelFormat之一:未知,半透明,透明或不透明
         * */
        @Overr



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 安卓图片加载之使用universalimageloader加载圆形圆角图片

相关文章

  • 2017-05-26Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决,studio-opencv
  • 2017-05-26深入浅出《Unix环境高级编程》:Unix基础知识(三)
  • 2017-05-224.3.1 BroadcastReceiver牛刀小试
  • 2017-08-23Glide中request的调用和管理
  • 2017-05-26Linux内核系列—操作系统开发之进入32位保护模式,linux保护模式
  • 2017-07-22Android触摸事件分发机制完全解析《一》
  • 2017-05-26几种执行shell的方法
  • 2017-05-26解决CentOS 7 history命令不显示操作记录的时间和用户身份问题
  • 2017-05-26材料设计---Design,设计---design
  • 2017-05-26android配置android studio not found target android-*.的问题,androidandroid-

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 使用phonegap播放音频,phonegap播放音频
    • xshell可以ping通但是不能远程服务器,putty可以远程
    • XListView,xlistview用法
    • Android 在Activity页面中如何实现Fragment数据的缓加载
    • Android--根据子控件的大小自动换行的ViewGroup,android--viewgroup
    • 仿拉手团购App8-- 更多模块,拉手团购app8--模块
    • android开发网络连接工具类(一),android工具类
    • android组合控件Titlebar的定制过程
    • Android之SystemUI加载流程和NavigationBar的分析
    • andriod 读取网络图片,

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有