Picasso-简单使用

来源:互联网 发布:网络文学作品论文 编辑:程序博客网 时间:2024/06/08 15:06

转载请注明出处:http://blog.csdn.net/pngfi/article/details/52067038

Picasso github地址

为什么用Picasso?

移动端的系统资源有限,Android给每个应用分配有限的内存,可能根据设备本身配置的不同,分配的内存大小也不一样。但是图片却占据大量的内存,比如 Galaxy Nexus 的相机拍摄的一张照片有2592x1936像素,大约5M像素。采用ARGB_8888 的配置把图片加载进内存,由于一个像素需要4个字节表示,那么总共需要大约19M的内存。这样当使用向ListView这样的控件加载图片列表的话,马上就会产生OOM。我们还需要下载、缓存(包括内存缓存和硬盘缓存)、对图片进行各种操作,真的会遇到各种头疼的问题。Picasso能帮助我们解决上面的问题,并且经受广大开发者测试,bug比较少。

初步使用

添加Picasso到你的工程依赖

Gradle

compile 'com.squareup.picasso:picasso:2.5.2'  

Maven

<dependency>      <groupId>com.squareup.picasso</groupId>    <artifactId>picasso</artifactId>    <version>2.5.2</version></dependency>  

加载图片从一个URL

Picasso 使用链试的API, 对于一个完整的请求至少要三个参数。

  • with(Context context) - 上下文.
  • load(String imageUrl) -指定要加载的图片,一般是图片的URL 。当然这个方法还有其他的参数比如URI,File等。
  • into(ImageView targetImageView) - 显示图片的imageview.

看代码

ImageView targetImageView = (ImageView) findViewById(R.id.imageView);  String internetUrl = "http://i.imgur.com/DvpvklR.png";Picasso      .with(context)    .load(internetUrl)    .into(targetImageView);

就是这么简单,如果这个URL指向的图片的存在的话,一会ImageView就会显示该图片。否则Picasso将会返回错误回调,我们后面会讨论这个话题。对于初学者看到这里肯定很屌很easy,但是这只不过是冰山一角。

加载不同资源

Picasso 可以从SD卡,Android资源、网路加载图片。

我们来看仔细看一下Picasso的load方法。

  • load(Uri uri)
    开始一个图片请求用指定的Uri,这是需要我们自己去构造Uri对象,如果uri为null,不会触发请求,但是会给imageview设置一个placeHolder如果你调用过placeholder()方法的话,关于你以理解为默认显示的图片。
Uri uri = resourceIdToUri(context, R.mipmap.future_studio_launcher);Picasso      .with(context)    .load(uri)    .into(imageViewUri);

其中Uri的构造如下:

public static final String ANDROID_RESOURCE = "android.resource://";public static final String FOREWARD_SLASH = "/";private static Uri resourceIdToUri(Context context, int resourceId) {    return Uri.parse(ANDROID_RESOURCE + context.getPackageName() + FOREWARD_SLASH + resourceId);}
  • load(String path)
    这是对 load(Uri uri)方法的封装,内部就是调用了 load(Uri.parse(path)) 。
    其中path可以为一个远程的图片url,就像我们上面实例中的那样;或者是本地图片,“file://”+本地绝对路径;或者是android 资源文件以android.resource:开头;
    或者是 content资源,以content:开头;
Picasso.with(context).load("file:///storage/27AE-14F7/Pictures/HospitalApp/IMG_20160729_193115.jpg ").into(imageView2);
  • load(File file)
Picasso.with(context).load(new File(...)).into(imageView3);
  • load(int resourceId)
    加载指定resourceId的android资源图片
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
1 0
原创粉丝点击