Picasso之图片缓存机制

Picasso介绍

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

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

废话不多说·~相信很多小伙伴已经迫不及待想要看到效果了哈哈!别急,我还在等待一个女孩,哈哈,不会让您们失望!
这里写图片描述
废话不多说下面直接上代码要分为三步

下载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
<?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上的图片加载的许多常见错误:

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

这里写图片描述
源码java.doc源码链接Picasso

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值