Picasso之图片缓存机制

Picasso介绍

picasso是Square公司开源的一个Android图形缓存库 主要有以下一些特性: 在adapter中回收和取消当前的下载; 使用最少的内存完成复杂的图形转换操作; 自动的内存和硬盘缓存; 图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作; 加载载网络或本地资源;
图像为Android应用程序添加了非常需要的上下文和视觉风格。 毕加索允许在您的应用程序无障碍图像加载 - 通常在一行代码!

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

废话不多说·~相信很多小伙伴已经迫不及待想要看到效果了哈哈!别急,我还在等待一个女孩,哈哈,不会让您们失望!
Picasso之图片缓存机制_第1张图片
废话不多说下面直接上代码要分为三步

下载picasso.jar点击直接下载http://square.github.io/picasso/
然后放在libs目录下如下图所示
这里写图片描述
然后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 
1.点击application 
2.选择File-》new-》Import Module 
3.加入成功后,application下面的setting.gradle下面会出现 
eg
`include ':app', ':vitamio'`
3.在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
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
"@+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" />
    

@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的异常如下

Picasso之图片缓存机制_第2张图片
源码java.doc源码链接Picasso

扫码加群!
Picasso之图片缓存机制_第3张图片

你可能感兴趣的:(个人Android技术文章,Android,第三方框架整理,Android进阶之旅)