开篇——介绍Picasso

(Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即Android平台的网络图片下载和缓存框架。

(Picasso如何使用?)框架嘛!既然牛人能够写出这个框架,自然使用流畅。不用担心,很简单,但深入源代码就需要花点功夫。

(为什么会出现Picasso框架?)Android开发中,常需要从远程服务器端获取图片;一般情况下,我们会使用HttpURLConnection(java.net.HttpURLConnection)和AsyncTask(android.os.AsyncTask)结合实现该功能;但还需要考虑其他情况:图片缓存和下载管理(??),因此聪明的做法是:封装成自己的工具类,或者是使用第三方框架(比如这里的Picasso)。

热身运动——HttpUrlConnection和AsyncTask实现网络图片下载

在使用Picasso框架之前,先来一个热身运动:使用HttpUrlConnection(java.net.HttpUrlConnection)和AsyncTask(android.os.AsyncTask)实现网络图片加载。

activity_main.xml文件方面,LinearLayout的垂直布局中布置两个控件:ImageView和Button;Button的点击事件触发网络图片请求和加载内存(即:显示图片)。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <ImageView
android:id="@+id/iv_image"
android:layout_width="200dp"
android:layout_height="200dp" /> <Button
android:onClick="loadImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="loading..." /> </LinearLayout>

AndroidManifest.xml文件方面,添加网络请求的用户权限。

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

MainActivity.java方面:

package com.fenix.picassodemo;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.widget.ImageView; public class MainActivity extends Activity { private ImageView mIView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView() {
mIView = (ImageView) findViewById(R.id.iv_image);
} private class ImageDownloadTask extends AsyncTask<String, Void, Bitmap> { ImageView iv; public ImageDownloadTask(ImageView iv) {
this.iv = iv;
} @Override
protected void onPreExecute() {
super.onPreExecute();
} @Override
protected Bitmap doInBackground(String... imgAddress) {
URL imgUrl = null;
HttpURLConnection connection = null;
InputStream inputStream = null;
Bitmap bitmap = null; try {
imgUrl = new URL(imgAddress[0]); // 将网络图片路径转化为URL实例 connection = (HttpURLConnection) imgUrl.openConnection();
connection.setDoInput(true);
connection.connect(); inputStream = connection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} return bitmap;
} @Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result); iv.setImageBitmap(result);
}
} public void loadImage(View v) {
new ImageDownloadTask(mIView).execute("http://pic32.nipic.com/20130829/12906030_124355855000_2.png");
} }

点击布局文件中的Button,执行loadImage(),即网络图片请求;网络请求不应该被写在主线程中,因此需要借助AsyncTask工具(封装Handler和Thread);一旦点击Button,即执行ImageDownloadTask。

图片资源来自:www.baidu.com的图片库(右键-》复制图片地址)。

AsyncTask结合HttpURLConnection,确实可以实现网络图片的请求,但问题是:Android应用程序(从网络图片角度),还比如:管理图片下载请求,合理使用内存等方面都需要考虑(Google工程师——极致体验的代言人)。这就是为什么出现了这么多类似于Picasso图片请求框架的缘故!当然还有很多开源框架需要熟悉(后续再说呗)。

Picasso框架——初体验

Android开源框架——Picasso的更多相关文章

  1. Android 开源框架Universal-Image-Loader学习

    Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...

  2. Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/39057201),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  3. Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  4. Android进阶笔记13:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

    1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListen ...

  5. android 开源框架推荐

    同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JS ...

  6. Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  7. Android开源框架Afinal第一篇——揭开圣女的面纱

    Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...

  8. 六款值得推荐的Android开源框架简介

    技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...

  9. Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告

    原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...

随机推荐

  1. 每天一个 Linux 命令(5):rm 命令

    昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...

  2. MyEclipse中的重命名

    我们要重命名一个函数或变量时,如果手工改会很耗时而且可能会有些遗漏,造成编译错误.这个时候可以在变量或函数定义处,按下MyEclipse的Alter + SHIF + R 重命名,然后按下Enter键 ...

  3. Sonar升级遇到的那些事儿

    目录 背景 如何升级 如何回滚 问题解决 参考 背景 目前我们用SonarQube版本是4.0,这次准备升级到最新版本5.1, 以便支持以后的JavaScript的项目. 如何升级 我们可以直接跨越版 ...

  4. (整理)SQL server 2012 中文乱码与5030错误

    安装2012后,一直没注意到中文的问题.直到有一天,突然发现字段内容竟然是“??”,然后一通查,原来是排序规则需要改变: 选择数据库->右键属性->选项,将排序规则改成“Chinese_P ...

  5. 0,SFDC 管理员篇 - 整体框架

    SFDC 框架布局, 通过以下分类我们可以了解Salesforce 每个云上所提供的功能和用途. ●销售云 Sales Cloud 销售自动化(Sales ForceAutomation,SFA)&a ...

  6. MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例

    有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传! 通过最近一段时间对MVC5.EF6的学习 ...

  7. ajax 提交數據

    $.ajax({ type: "get", async: false, url: "/book/UpdateSession", data: { }, dataT ...

  8. 自己练习读取写入txt

    读取文件中的内容生成一个list,然后修改list后再写会该文件文件中的格式是:AA,BB,CC,DDblist = []for line in open('a.txt'): blist.extend ...

  9. c++学习笔记——聚合类

    聚合类定义:1.所有的成员都是public的. 2.没有定义任何构造函数. 3.没有类内初始值. 4.没有基类,也没有virtual函数. 聚合类的初始化:我们可以提供一个花括号括起来的成员函数初始值 ...

  10. 实现MFC菜单画笔画圆,并且打钩

    这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进. 首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_G ...