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
"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" />
效果图不错吧!
Picasso自动处理Android上的图片加载的许多常见错误:
> 1.在 适配器中处理ImageView回收和下载取消
> 2.复杂的图像转换与最小的内存使用。
> 3.自动内存和磁盘缓存。
> 4.图形转换比如大小,旋转等
> 5.加载网络资源和本地资源
> ![这里写图片描述](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)’
“`
总结:
- 首先下载picasso.jar然后导入到工程中
2.创建一个PicassoActivity然后将url加载进行并显示在ImageView空间中
3.不要忘记添加网络权限千万注意:Android中UI线程不能有访问网络的操作,否则会报android.os.NetworkOnMainThreadException的异常如下