Android 获取并显示远程图片 Picasso框架的使用

Android 获取并显示远程图片 Picasso框架的使用(一)


转载请注明出处:明桑Android

在Android开发中,常需要从远程获取图片并显示在客户端,当然我们可以使用原生HttpUrlConnection和AsyncTask等操作来完成,但并不推荐,因为这样不仅需要我们编写大量的代码,还需要处理缓存和下载管理等,最好自己封装成库或者采用第三方库;

Picasso:A Powerful Image Downloading and Caching Library for Android

根据名字就知道它是跟什么相关了(Picasso:毕加索)它的基本操作非常简单喔

文章主要介绍如何通过基本的HttpUrlConnection和AcyncTask实现获取远程图片;以及如何使用Picasso框架来实现,最后作为练习实现一个小Demo,希望对正在学习Android网络操作的同学有所帮助;

1,使用HttpUrlConnection和AsyncTask实现远程图片下载

使用HttpUrlConnection和AsyncTask获取远程图片,需要以下几步:

HttpUrlConnection connection=url.openConnection();//url代表图片地址
InputStream in=connection.getInputStream();
Bitmap bitmap=BitmapFactory.decodeStream(in);
imageView.setBitmap(bitmap)

我们知道在主线程中是无法执行以上网络操作的,所以需要AsyncTask,将耗时操作运行在后台线程中,对于HttpUrlConnection和AsyncTask具体操作不熟悉的可以看看我写的上一篇文章:Android网络编程 HttpUrlConnection HttpClient 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);
        }
    }
    }
2,Picasso框架
什么是Picasso:

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

如何使用Picasso

android update project -p

ant jar

2.Picasso的基本用法: 
将Picasso添加进项目后,要使用它非常简单,只需要一行代码就能搞定:

Picasso.with(context).load(imageUrl).into(imageView);

短短的一行代码为我们解决了很多问题:

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

3.适配器:适配器自动发现和重用以前取消的下载:

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

4.图像格式转换:很多时候需要将图片进行格式转换或者剪裁以节省内存或者达到我们的布局效果:

剪裁大小:

    Picasso.with(context).load(imageUrl).resize(50,50).centerCrop().into(imageView);

自定义格式转换:为了实现更多你想要图片转换的效果,你可以自己实现一个实现了Transformation接口的类,然后将其对象传递给transform()方法:

 public calss myTransformation implements Transformation{
        @Overrride
        public Bitmap transform(Bitmap source){
            //对source实现自定义裁剪
        }
        @Override
        public String key(){
            return "square()";
        }

    }

5.占位符图片:所谓的占位符图像即当图片未正常显示时默认的图片,通过placeholder()设置,Picasso也支持设置图片显示错误时显示的默认图片,通过error()设置:

    Picasso.wint(context).load(imageUrl).placeholder(R.drawable.image_placeholder).error(R.drawable.image_error_placeholder).into(imageView);

6.载入本地资源:除了通过网络下载图片,Picasso也可以载入本地图片资源:

Picasso.with(context).load(R.drawable.icon).into(imageView);
    Picasso.with(context).load("file:///android_asset/Adnroid.png").into(imageView);

Picasso.wiht(context).load(new File(...)).into(imageView);

7.调试:为了方便调试,你可以通过调用Picasso的setIndicatiorEnabled(true);可以让不同来源的图片显示一个不同的色彩标记;

这里写图片描述

以上的内容已经够多了,限于篇幅就把Picasso的练习Demo放到下篇文章吧!

总结:

是不是觉得Picasso的使用很简单了,如果应用中需要获取和显示大量的图片数据,何不考虑使用Picasso一下呢。来做个Demo感受下:Android 获取并显示远程图片 Picasso框架的使用(二)

参考资料:

Picasso官网

Sending and Managing Network Requests

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值