Picasso占位符

占位符

也许我们甚至根本不需要解释或者讨论它:空的ImageView在任何UI上看起来都不是很好。如果你使用Picasso,你最有可能做的操作就是通过一个网络连接去加载图片。根据你的用户所处的环境的不同,这可能会花费掉一定的时间。一个更好的习惯是去显示一个占位图片直到图片被加载上来并且处理完毕。

Picasso的接口使这个工作变得非常简单,只要调用.placeHolder(),Picasso会把它当作占位显示直到你期望的图片准备好。
Picasso
  .with(context)
  .load(imageUrls[position])
  .placeholder(R.mipmap.ic_launcher)
  .fit()
  .into((ImageView) convertView);
很明显,一个网络资源不能被作为占位符使用,因为它需要的是一个加载好了的数据。App资源和drawable资源才是有保证的。然而,对于一个load()的参数来说,Picasso可以接受所有类型的值。这些也许不能被加载完成(没有网络,服务失败等原因),下一段我们会讨论错误占位。

错误占位

现在我们假设我们的app去加载一个已经失效了的网络图片。Picasso确实给了我们获取错误回调或者其他合适的动作的功能。但是当我们稍后采取介绍它,现在来说它是非常深奥的。大多数情况下,我们用一个标记来表示图片没有被加载就足够了。
错误占位的使用方法和之前介绍的占位符基本是一样的,只是方法名改为了error():
Picasso
  .with(this)
  .load("http://futurestud.io/non_existing_image.png")
  .placeholder(R.mipmap.ic_launcher)
  .error(R.mipmap.icon_head_default)
  .into(imageView);
如果你规定去load()的值不能被加载时Picasso会显示R.mipmap.icon_head_default 。error()的可用参数只能是已经初始化的drawable对象或者指向它们的资源(R.drawable.<drawable-keyword>)。

noFade()的使用

无论在加载图片之前你是否显示占位符,Picasso都会自动的给图片加上一个淡去动画。如果你希望图片直接被显示出来,就要调用noFade()方法:
Picasso
    .with(this)
    .load("http://futurestud.io/non_existing_image.png")
    .placeholder(R.mipmap.ic_launcher)
    .error(R.mipmap.icon_head_default)
    .noFade()
    .into(imageView);
这会让你的图片没有任何缓冲的立刻显示出来,一定要确认你有理由去这么做。
这些参数都是相互独立的,举例来说,你可以只去设置.error()而不调用.palceholder()。任意参数的组合都是可以的。

noPlaceholder()的使用

它会不去显示之前通过.placeholder()或.error()设置好的占位,而是有一种不同的使用方法。
考虑一下情景:你想去加载一张图片,一段时间后你希望在同一个ImageView中展示另一张图片。默认的方法是在这个时候,重新去创建一个Picasso,然后ImageView的内容会被清除掉,如果这个ImageView在你的UI中很显眼,这将是非常难看的,因为用户也许会注意到两张图片之间的变化。一个更好的方法是在第二次Picasso请求时去调用.noPlaceholder(),它会让之前的图片在新的图片被加载完成前一直显示。
Picasso
    .with(this)
    .load(eatFoodyImages[0])
    .placeholder(R.mipmap.ic_launcher)
    .into(imageView, new Callback() {
        @Override
        public void onSuccess() {
            Picasso
                .with(MainActivity.this)
                .load(eatFoodyImages[1])
                .noPlaceholder()
                .into(imageView);
        }
        @Override
        public void onError() {
        }
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值