Picasso开源图片加载利器

英文官网地址:http://square.github.io/picasso/

在Android开发中,我们往往会需要远程获取图片并且显示在客户端上面,从前我们都是使用HttpUrlConnection和AsyncTask这种原生的方式来完成,但是到了现在就不推荐这样使用了,因为这样会需要我们编写大量代码,还需要处理缓存和下载管理等。


Picasso:A Powerful Image Downloading and Caching Library for Android


Picasso(毕加索),外国人起名字还是很有意思的,根据名字我们基本可以知道它是跟图片有关的框架

我们都知道,在主线程中是无法执行耗时操作的,所以需要AsyncTask,将耗时操作运行在后台线程中。网络加载图片也是一样的,例如:

 public class MainActivity extends Activity {
    private ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) { 	
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        String url = "http://www.jycoder.com/json/Image/1.jpg";

        // 执行Task
        new ImageDownloadTask(ivBasicImage).execute(url);
    }

    //自定义获取图片Task
    private class ImageDownloadTask extends AsyncTask<String, Void, Bitmap> {
        ImageView imageView;

        public ImageDownloadTask(ImageView imageView) {
            this.imageView = imageView;
        }

        protected Bitmap doInBackground(String... addresses) {
            Bitmap bitmap = null;
            InputStream in;
            try {
                // 建立URL连接
                URL url = new URL(addresses[0]);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                // 打开输入流
                conn.connect();
                in = conn.getInputStream();
                // 编码输入流
                bitmap = BitmapFactory.decodeStream(in);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
              if(in != null)
                 in.close();
            }
            return bitmap;
        }

        // Task执行完毕,返回bitmap
        @Override
        protected void onPostExecute(Bitmap result) {
            // Set bitmap image for the result
            imageView.setImageBitmap(result);
        }
    }
    }

可以看出来以上代码非常繁琐,但是如果换成我们今天要讲的Picasso那么这个步骤就变得简单了很多。


什么是Picasso:强大的图片下载缓存的第三方库;我觉得这就是对它最准确的描述了,至于其他特性,可以参见官网介绍

1、基本使用方法

Picasso.with(Context).load(imageurl).into(ImageView);
对,你没有看错,一行代码就搞定了我们的图片加载!

这行代码为我们解决了什么问题:

  • 自动将图像缓存在本地
  • 通过图片压缩转换以减少内存消耗
  • 自动处理了ImageView的回收,即自动取消不在视野范围内的ImageView视图资源的加载

2、剪裁图片

Picasso.with(context).load(url) .resize(50, 50).centerCrop().into(imageView);
是不是也非常简单

3、占位图片
picasso提供了两种占位图片,未加载完成或者加载发生错误的时需要一张图片作为提示。

Picasso.with(MainActivity.this).load("http://square.github.io/picasso/static/sample.png").placeholder(R.mipmap.loading).error(R.mipmap.ic_launcher).into(img);

然后呢,Picasso还提供了debug的标示,调用picasso的setIndicatorsEnabled方法,true是debug模式,跟踪代码其实就是在最后生成的PicassoDrawable类的ondraw里绘制了个左上角小三角

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值