图片框架Picasso的简单使用

来源:互联网 发布:linux wine怎么使用 编辑:程序博客网 时间:2024/04/27 22:34
Picasso 是Square公司开源的一个Android图形缓存库,实现图片下载和缓存功能。
官网地址:http://square.github.io/picasso/
下载地址:https://repo1.maven.org/maven2/com/squareup/picasso/picasso/
在线API:http://square.github.io/picasso/2.x/picasso/

Picasso不仅实现了图片异步加载的功能,还解决了android中加载图片时需要解决的一些常见问题。

Picasso主要有以下特点:

1.在adapter中取消不在视野范围的ImageView图片资源加载,解决了图片错位的问题;

2.使用最少的内存完成图片的转换;

3.实现的内存缓存和磁盘缓存。

4.图形的转换,比如大小、旋转等;

5.加载网络图片和本地图片。


Picasso使用起来相对于一般的图片下载也非常的简单:

一般图片下载主要有以下几个步骤:
1.使用异步任务加载图片(如:Handler + Thread),获取图片资源;

2.是一个BitmapFactory对图片进行解码,转换成Bitmap对象;

3.将图片显示到ImageView。


Picasso的简单使用

① 一行代码即可完成图片的加载和显示:

Picasso.with(context).load("http://img15.3lian.com/2015/h1/294/d/9.jpg").into(imageView);
当然在使用Picasso需要导入Picasso的包,如果是使用Eclipse开发,就通过上面提供的地址下载jar包,然后导入到项目中,如果是使用Android studio进行开发,就可以直接通过一下方式即可:

dependencies {    // ... 项目中使用的其他包或库    compile 'com.squareup.picasso:picasso:2.5.2'}

另外一定要记得添加网络访问权限:

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


② Picasso不仅可以加载网络图片,也可以加载本地(资源)文件图片:

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);

③ 轻易实现图形的转换:

// 指定图片大小Picasso.with(context).load(url).resize(50, 50).centerCrop().into(imageView)// 指定图片大小并旋转图片Picasso.with(context).load(imgUrl).resize(width, height).centerCrop().rotate(30);.into(imageView);


④ 当ListView、GridView快速滑动时,使用Picasso不加载图片:

absListView.setOnScrollListener(new AbsListView.OnScrollListener() {    @Override    public void onScrollStateChanged(AbsListView view, int scrollState) {if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_TOUCH_SCROLL) {//如果在暂停或者触摸的情况下开始加载PicassoUtils.newInstance(context).getPicasso().resumeTag(context);} else {//停止加载PicassoUtils.newInstance(context).getPicasso().pauseTag(context);}    }    @Override    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {    }});


⑤ 指定正在加载和加载失败显示的图片:

Picasso.with(context)    .load(url)    .placeholder(R.drawable.user_placeholder)    .error(R.drawable.user_placeholder_error)    .into(imageView);


⑥ 还可以自定义图形变换:

/** * 变换图片对象 */public class ChangeTransformation implements Transformation {@Overridepublic Bitmap transform(Bitmap source) {// 将图片变换为圆形显示int width = source.getWidth();        int height = source.getHeight();        int centerX = width / 2;        int centerY = height / 2;        int radius = Math.min(width, height) / 2;        Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);        Canvas canvas = new Canvas(result);        canvas.drawCircle(centerX, centerY, radius, paint);        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));        canvas.drawBitmap(source, 0, 0, paint);if (result == null) {result = source;}source.recycle();return result;}@Overridepublic String key() {// 返回一个唯一键用作缓存的目的return "change_transform - " + System.currentTimeMillis() + " - " + random.nextLong();}}
关于Picasso更多的方法可以查看官方API文档,地址:http://square.github.io/picasso/2.x/picasso/

下面是一个简单的例子,效果图如下(因为上传的大小限制了,所以作为两张图片上传):

              

效果就是这样,下面说一下这个Demo代码的一些地方,主要是写了几个工具类:

1.Picasso的工具类PicassoUtils

这个类使用单例设计模式,全局使用一个,也就是全局使用一个Picasso对象,在Demo中我是在基类(BaseActivity)中初始化的;在PicassoUtils这个类中封装了一些加载图片的方法,加载图片时调用一个方法即可;另外在这个类中写了一个图形装换的方法的内部类,可以将图片转换为圆形和指定圆角大小的圆角矩形,其他转换可以根据需要进行扩展。

2.图形工具类BitmapUtils

这个类中都是静态方法,提供了一些对Bitmap对象操作的方法,包括将图片变为圆角矩形、圆形、对图片进行压缩处理、水平翻转原图、将彩色图片变为黑白图片等一些方法。

3.针对ListView和GridView这类控件类

在这个类中写了一个方法,调用这个方法,将ListView或GridView传入就可以实现快速滑动时不加载图片,手指触摸滑动或停止滑动时恢复加载图片。


Demo源代码已经上传,点击进入下载页下载Demo源码,源码是一个Android Studio项目,下载之后解压,直接用Android Studio打开即可,不要导入。


0 0
原创粉丝点击