天天看点

Picasso之图片缓存机制

Picasso介绍

picasso是Square公司开源的一个Android图形缓存库 主要有以下一些特性: 在adapter中回收和取消当前的下载; 使用最少的内存完成复杂的图形转换操作; 自动的内存和硬盘缓存; 图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作; 加载载网络或本地资源;

图像为Android应用程序添加了非常需要的上下文和视觉风格。 毕加索允许在您的应用程序无障碍图像加载 - 通常在一行代码!

废话不多说·~相信很多小伙伴已经迫不及待想要看到效果了哈哈!别急,我还在等待一个女孩,哈哈,不会让您们失望!

Picasso之图片缓存机制

废话不多说下面直接上代码要分为三步

下载picasso.jar点击直接下载http://square.github.io/picasso/

然后放在libs目录下如下图所示

Picasso之图片缓存机制

然后add to path ok就可以了!

一.idea小伙伴这样添加一.通过gradle上导入 eg:picasso

在支持Android studio的gradle第三方类库中,github上或类库项目readme会有说明

compile ‘com.squareup.picasso:picasso:2.5.2’

如何将其添加到项目中呢?

1.打开app下面的build.gradle.

2.在dependencies{},里面添加上面一句话

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
}
           

3.然后点击Sync Now,如果没有出现错误,就可以在项目中使用了

二.通过jar包加入项目

eg.picasso

1.下载picasso的jar包到本地

2.将picasso-x.x.x.jar放到app目录下的libs文件夹下面

3.右击libs下的picasso-x.x.x.jar选择add as library,选择moddle-》app

4.加入成功后,app下面的build.gradle会将jar加入进来

eg.

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile files('libs/picasso-2.5.2.jar')
}
**三.导入第三方library**

eg.Vitamo 
点击application 
选择File-》new-》Import Module 
加入成功后,application下面的setting.gradle下面会出现 
eg
`include ':app', ':vitamio'`
在app下面的build.gradle加入项目 
eg.
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.loopj.android:android-async-http:1.4.9'
    compile project(':vitamio')
}
建PicassoActivity将上下文以及url加载进来,并在ImageView中显示
> 然后创建activity_picasso布局
> 监听事件代码
> `private void initView() {
        // 初始化UI组件
        iv_picasso=(ImageView) findViewById(R.id.imageView1);
        findViewById(R.id.btn_picasso).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                /** 加载网络排图片
                 * 第一个参数 上下文也可以是当前Activity
                 * load(url)url是您要加载的图片缓存地址
                 * into就是把当前图片放进你要显示控件ImageView中
                 */
                Picasso.with(PicassoActivity.this).load("http://img03.sogoucdn.com/app/a/100520093/508de2a2df69f20f-ad54974be9c2600f-01f80ad8e3e76b8fe0205b58d9e59649.jpg").into(iv_picasso);
            }
        });`

布局文件activity_picasso
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
<ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="84dp"
        android:layout_marginTop="68dp"
        android:src="@drawable/ic_launcher" />
    <Button 
        android:id="@+id/btn_picasso"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下载Picasso图片"
        android:gravity="center"
        android:layout_below="@id/imageView1"
        />
</RelativeLayout>
效果图不错吧!

Picasso自动处理Android上的图片加载的许多常见错误:

>  在 适配器中处理ImageView回收和下载取消
>  复杂的图像转换与最小的内存使用。
>  自动内存和磁盘缓存。
>  图形转换比如大小,旋转等
>  加载网络资源和本地资源
>  <img>![这里写图片描述](http://img.blog.csdn.net/20161013181249560)
>  下面是Picasso源码分析
>  ![这里写图片描述](http://img.blog.csdn.net/20161013181623316)
           

@Override public void getView(int position, View convertView, ViewGroup parent) {

SquaredImageView view = (SquaredImageView) convertView;

if (view == null) {

view = new SquaredImageView(context);

}

String url = getItem(position);

Picasso.with(context).load(url).into(view);

}

IMAGE TRANSFORMATIONS
Transform images to better fit into layouts and to reduce memory size.
           

Picasso.with(context)

.load(url)

.resize(50, 50)

.centerCrop()

.into(imageView)

> 还可以为更高级的效果指定自定义转换。
           

public class CropSquareTransformation implements Transformation {

@Override public Bitmap transform(Bitmap source) {

int size = Math.min(source.getWidth(), source.getHeight());

int x = (source.getWidth() - size) / 2;

int y = (source.getHeight() - size) / 2;

Bitmap result = Bitmap.createBitmap(source, x, y, size, size);

if (result != source) {

source.recycle();

}

return result;

}

@Override public String key() { return “square()”; }

}

> 将此类的实例传递给transform方法
> `Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);`
> 
> 源,资产,文件,内容提供程序都作为映像源支持。
           

代码如下

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);

Picasso.with(context).load(“file:///android_asset/DvpvklR.png”).into(imageView2);

Picasso.with(context).load(new File(…)).into(imageView3);

MAVEN
           

com.squareup.picasso

picasso

(insert latest version)

GRADLE
           

compile ‘com.squareup.picasso:picasso:(insert latest version)’

“`

总结:

  1. 首先下载picasso.jar然后导入到工程中

    2.创建一个PicassoActivity然后将url加载进行并显示在ImageView空间中

    3.不要忘记添加网络权限千万注意:Android中UI线程不能有访问网络的操作,否则会报android.os.NetworkOnMainThreadException的异常如下

    <uses-permission android:name="android.permission.INTERNET">

Picasso之图片缓存机制

源码java.doc源码链接Picasso

扫码加群!
Picasso之图片缓存机制

继续阅读