安卓图片加载框架Gilde的用法

转自:http://blog.csdn.net/guolin_blog/article/details/53759439

gilde 依赖:compile 'com.github.bumptech.glide:glide:3.7.0'

 加载图片只需要一行核心代码:

 Glide.with(this).load(URl).into(imageView);

下面就让我们来解析这行代码

首先gilde.with();方法用于创建一个加载图片的实例with()方法可以接收Context、Activity或者Fragment类型的参数我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。如果调用的地方既不在Activity中也不在Fragment中也没关系,我们可以获取当前应用程序的ApplicationContext,传入到with()方法当中。注意with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。

接下来看一下load()方法,这个方法用于指定待加载的图片资源。Glide支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri对象等等。因此load()方法也有很多个方法重载,除了我们刚才使用的加载一个字符串网址之外,你还可以这样使用load()方法:

// 加载本地图片

File file = new File(getExternalCacheDir() + "/image.jpg");

Glide.with(this).load(file).into(imageView);

 // 加载应用资源

int resource = R.drawable.image;

Glide.with(this).load(resource).into(imageView); 

// 加载二进制流

byte[] image = getImageBytes();

Glide.with(this).load(image).into(imageView);

// 加载Uri对象

Uri imageUri = getImageUri();

Glide.with(this).load(imageUri).into(imageView);

最后看一下into()方法,这个方法就很简单了,我们希望让图片显示在哪个ImageView上,把这个ImageView的实例传进去就可以了。当然,into()方法不仅仅是只能接收ImageView类型的参数,还支持很多更丰富的用法,不过那个属于高级技巧

Gilde占位图

上面的一行代码是Gilde最核心的东西而后面我们所加载的东西是在基础上不断扩展的

首先因为图片从网络上加载出来是需要时间的所以我们在进入用户界面的时候图片要稍等一会儿才能出来那么我们能不能有办法自己用户体验呢,当然可以 Gilde提供了各种各样的丰富的APL支持 其中就包括了gilde占位符

Glide.with(this)

    .load(url)

    .placeholder(“占位图片”)

     .into(imageView);

就只是在核心代码之间插入了一个placeholder()方法,当然这个占位图的用法也展示了Gilde其他APL的用法就是在loadinto之间添加任意想添加的功能就可以了

 

当你第一次加载图片的时候图片会从网络上请求这个时候图片就已经自动缓存下来了,第二次加载的时候回直接从缓存读取因为速度比从网络上加载来的快所以你会看不到占位图片的显示,所以我们还要添加一行代码作用就是禁止缓存

.diskCacheStrategy(DiskCacheStrategy.NONE)


 

当然,这只是占位图的一种,除了这种加载占位图之外,还有一种异常占位图。异常占位图就是指,如果因为某些异常情况导致图片加载失败,比如说手机网络信号不好,这个时候就显示这张异常占位图。

Glide.with(this)

    .load(url)

    .placeholder(R.drawable.loading)

    .error(R.drawable.error)

    .diskCacheStrategy(DiskCacheStrategy.NONE)

     .into(imageView);

很简单,这里又串接了一个error()方法就可以指定异常占位图了。

 Gilde还有一个强大的功能就是支持占位符,当然也不需要添加任何代码,只需要得到动态图的地址就可以了 也就是说不管我们传入的是一张静态图还是一张动态图Gilde都会自行判断。

但是我如果想拿到动态图片禁止状态呢 也就是指定图片格式 我们只需要添加一个方法就可以了。

在load()方法的后面加入了一个asBitmap()方法,这个方法的意思就是说这里只允许加载静态图片,不需要Glide去帮我们自动进行图片格式的判断了。当然展示的静态图是动态图的第一帧。

Android图片框架Glide-3.7.0(最新,很强大),超好用的图片框架(包含jar和源码) Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。近日,Glide 3.0发布,现已提供 jar包下载 ,同时还支持使用Gradle以及Maven进行构建。该版本包括很多值得关注的新功能,如支持Gif 动画和视频剧照解码、智能的暂停和重新开始请求、支持缩略图等,具体新增功能如下如下: GIF 动画的解码 :通过调用Glide.with(context).load(“图片路径“)方法,GIF动画图片可以自动显示为动画效果。如果想有更多的控制,还可以使用Glide.with(context).load(“图片路径“).asBitmap()方法加载静态图片,使用Glide.with(context).load(“图片路径“).asGif()方法加载动画图片 本地视频剧照的解码: 通过调用Glide.with(context).load(“图片路径“)方法,Glide能够支持Android设备中的所有视频剧照的加载和展示 缩略图的支持: 为了减少在同一个view组件里同时加载多张图片的时间,可以调用Glide.with(context).load(“图片路径“).thumbnail(“缩略比例“).into(“view组件“)方法加载一个缩略图,还可以控制thumbnail()中的参数的大小,以控制显示不同比例大小的缩略图 Activity 生命周期的集成: 当Activity暂停和重启时,Glide能够做到智能的暂停和重新开始请求,并且当Android设备的连接状态变化时,所有失败的请求能够自动重新请求 转码的支持: Glide的toBytes() 和transcode() 两个方法可以用来获取、解码和变换背景图片,并且transcode() 方法还能够改变图片的样式 动画的支持: 新增支持图片的淡入淡出动画效果(调用crossFade()方法)和查看动画的属性的功能 OkHttp 和Volley 的支持: 默认选择HttpUrlConnection作为网络协议栈,还可以选择OkHttp和Volley作为网络协议栈 其他功能: 如在图片加载过程中,使用Drawables对象作为占位符、图片请求的优化、图片的宽度和高度可重新设定、缩略图和原图的缓存等功能
Sure! Here's an example of Android camera stream logs: ``` D/CameraManagerGlobal: Connecting to camera service I/CameraManager: Using legacy camera HAL. D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface I/Camera: CameraDeviceState:CAMERA_STATE_OPENING I/Camera: CameraDeviceState:CAMERA_STATE_OPENED W/Camera: CameraService::connect call from pid 1234; forcing disconnect() D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface I/Camera: CameraDeviceState:CAMERA_STATE_IDLE I/Camera: CameraDeviceState:CAMERA_STATE_PREVIEW D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface I/Camera: CameraDeviceState:CAMERA_STATE_RECORDING D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface I/Camera: CameraDeviceState:CAMERA_STATE_PREVIEW D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface D/Camera: app passed NULL surface I/Camera: CameraDeviceState:CAMERA_STATE_IDLE I/Camera: CameraDeviceState:CAMERA_STATE_CLOSED ``` These logs show the various states of the camera device, including connecting to the camera service, opening the camera, setting up the preview stream, and recording video. The "app passed NULL surface" messages indicate that the app did not provide a valid surface for displaying the camera preview.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值