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:首先需要和远程图片url建立一个连接:HttpUrlConnection connection=url.openConnection();//url代表图片地址从connection中获取输入流:InputStream in=connection.getInputStream();使用BitmapFactory.decodeStream(in)将输入流编码成Bitmap:Bitmap bitmap=BitmapFactory.decodeStream(in);imageView.setBitmap(bitmap),将bitmap对象添加至ImageView中:imageView.setBitmap(bitmap)

我们知道在主线程中是无法执行以上网络操作的,所以需要AsyncTask,将耗时操作运行在后台线程中,对于HttpUrlConnection和AsyncTask具体操作不熟悉的可以看看我写的上一篇文章:Android网络编程 HttpUrlConnection HttpClient AsyncTask;

以下是使用上述代码完成图片下载的示例:

Activity {private ImageView imageView;@Overrideprotected 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”;// 执行Tasknew ImageDownloadTask(ivBasicImage).execute(url);} 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@Overrideprotected void onPostExecute(Bitmap result) {// Set bitmap image for the resultimageView.setImageBitmap(result);}}}2,Picasso框架什么是Picasso:

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

如何使用Picasso

跟所有第三方库的使用一样,我们需要将其添加进我们的项目:可以直接下载最新.jar包 picasso-2.5.2.jar,也可以从github中将其clone到本地:picasso

如果是直接下载的.jar包,将其添加至项目libs文件夹下,并右键jar包,选择将其Add As Library:如果是clone的项目,你还是需要将其编译成jar包,然后根据第1步操作添加进项目:以下是编译过程: 首先进入你clone的Picasso目录下,然后在命令行执行如下命令

android update project -p

ant jar

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

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

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

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

@Override(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{@Overrridepublic Bitmap transform(Bitmap source){//对source实现自定义裁剪}@Overridepublic String key(){return “square()”;}}学习会使你永远立于不败之地。

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

相关文章:

你感兴趣的文章:

标签云: