Picasso入门教程(五) Placeholder,errors,Fading
2016-06-02 20:32
531 查看
Placeholder:.placeholder()
我们可能不需要解释这种现象:一个空的ImageView在你的UI中肯定不好看。如果你使用Picasso,你可能通过网络连接来加载图片,这取决于用户的环境,这可能会花费很长时间。一个比较好的解决方案是在加载图片的过程中,你可以先加载一个本地图片当做替代图片,直到从网络下载的图片加载出来。Picasso的流接口使得这样实现变得非常简单!只需要调用
.placeHolder()这个方法,在加载出网络图片之前,Picasso将会展示placeholder的图片。
Picasso .with(context) .load(UsageExampleListViewAdapter.eatFoodyImages[0]) .placeholder(R.mipmap.ic_launcher) // can also be a drawable .into(imageViewPlaceholder);
很明显,你不可以将一张网络上的图片用作替代图片,因为这依旧需要从网上加载。app上的资源和图片是即时可用的。然而,对于load()这个参数,Picasso可以接受所有类型的值。这个可能不会被加载出来(无网络连接,服务器崩溃),在下一节,我们会讨论error placeholder。
Error Placeholder:.error()
我们假定app需要从网络上加载图片,但是当前网络出问题了。Picasso会将错误返回并且做出合适的处理。在我们做出相应的操作之前,我们可以先使用一张替代图片来代替来告诉用户图片加载出错了。这和之前Picasso处理placeholder的流接口是相同的,只是使用一个名为error()的函数。
Picasso .with(context) .load("http://futurestud.io/non_existing_image.png") .placeholder(R.mipmap.ic_launcher) // can also be a drawable .error(R.mipmap.future_studio_launcher) // will be displayed if the image cannot be loaded .into(imageViewError); ``` 就是这个了!如果你想要加载的图片并没有加载,Picasso将会加载`R.mipmap.future_studio_launcher` 。同样,error()所传的参数只能是被初始化过得drawable对象或者它们的id。 #noFade()的使用 无论在加载图片之前你有没有设置placeholder,Picasso总是自动渐显(fade in)加载图片,因为这会让你的ui变化不那么突兀。如果你希望直接加载图片,而没有渐显(fade)的效果,使用`.noFade()`这个方法即可。 这会直接加载图片,而不带任何效果。在你这样做之前,请先确定你是真的需要这个效果。 知道所有的参数都是独立的并且不依赖于其他参数这很重要。例如,你可以设置`.error()` 而不需要调用`.placeholder()`. 任何参数进行组合都是有可能的。 #noPlaceholder的使用 你可能会发现我们曾经使用过noPlaceholder()。很重要的一点是:这并不是取消之前设置的`.placeholder()` 或者`.error()` 。这适用于另一种不同的情况。 我们来想一下下面这种情况:你在ImageView中加载了一张图片,一段时间过后,你想在同样的ImageView中加载另一张图片。使用默认的设置,你在重新调用Picasso的时候,ImageView将会加载之前设置的placeholder的图片。如果这个ImageView在你的UI中很重要的话,在几秒钟内快速的改变ImageView的图片会看起来很不合适。一个比较好的解决方案是调用`.noPlaceholder()`这个方法。在第二张图片加载之前,ImageView会一直显示第一张图片。这对用户来说会很友好。
// load an image into the imageview
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.placeholder(R.mipmap.ic_launcher) // can also be a drawable
.into(imageViewNoPlaceholder, new Callback() {
@Override
public void onSuccess() {
// once the image is loaded, load the next image
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[1])
.noPlaceholder() // but don’t clear the imageview or set a placeholder; just leave the previous image in until the new one is ready
.into(imageViewNoPlaceholder);
}
@Override public void onError() { } });
“`
这一段代码就做了我们描述的那一种情况。当加载完第一张图片的时候,开始发送第二个请求。然而,幸运的是,我们使用了.noplaceholder(),这就会在加载第二张图片之前,ImageView一直显示第一张图片。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories