Android开源框架——Picasso
开篇——介绍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的更多相关文章
- Android 开源框架Universal-Image-Loader学习
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...
- Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/39057201),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android进阶笔记13:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)
1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListen ...
- android 开源框架推荐
同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JS ...
- Android 开源框架Universal-Image-Loader全然解析(二)--- 图片缓存策略具体解释
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android开源框架Afinal第一篇——揭开圣女的面纱
Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在 ...
- 六款值得推荐的Android开源框架简介
技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...
- Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告
原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二) ...
随机推荐
- NHibernate和 FluentNHibernate
NHibernate有两类配置文件,一个是数据库连接配置文件(一般写到程序配置文件里),另一个是数据表和实体的映射文件(实体类.hbm.xml) 开源的框架Fluent NHibernate,有了它, ...
- js 字符串截取
substr方法: text.substr(start[,length]); text:要提取子字符串的字符串或String对象.必选 start:子字符串的起始位置.以0开始索引.必选 length ...
- silverlight简单数据绑定2
<Grid x:Name="LayoutRoot" Background="white" Loaded="LayoutRoot_Loaded&q ...
- Redirecting Console.WriteLine() to Textbox
I'm building this application in Visual Studio 2010 using C#. Basically there are 2 files, form1.cs ...
- 通过SQL语句提取存储过程中的内容
首先,列出服务器上所有数据库. -- 获取数据库列表 SELECT name FROM master.dbo.sysdatabases ORDER BY name 其次,这是一种让所有的用户从数据库中 ...
- PaintCode调研
1. 背景 PaintCode是一款面向iOS和Mac应用开发者及设计师的矢量图形可视化开发工具.它可以让设计师把设计好的psd文件直接导入该工具,然后生成用Quartz 2D 产生的object ...
- Mono addin 学习笔记 4 再论数据扩展点(Data only extension point)
1. Attribute声明方式 定义扩展属性 [AttributeUsage(AttributeTargets.Assembly, AllowMultiple= true)] public clas ...
- Distributed Transaction Coordinator 无法启动
有时候我们需要进行COM应用程序的权限设置,控制面板-->管理工具-->组件服务-->然后依此展开:组件服务-->计算机-->我的电脑-->DCOM 配置,接下来找 ...
- WCF使用小结:(1)WCF接收HTTP POST数据的处理方法
在WCF 4.0中,为我们创建Restful API有了更好的支持.通过定义UriTemplate,WebInvoke就可以快速开发API接口. 这里我记录一下HTTP POST数据时要如何接收POS ...
- pytion学习1
个人感觉学习一门新语言,简单的语法懂一点足矣.接下来就是编程.读懂别人程序的每一句,理解每一句的意义. #Filename:MyAddressBook.py import cPickle as p i ...