Picasso入门教程(三)
2016-06-02 16:30
686 查看
使用Listview实现一个简单的画廊
首先我们需要一些测试的图片,我们在服务器上上传了一些比较好的图片供我们测试。public static String[] eatFoodyImages = { "http://i.imgur.com/rFLNqWI.jpg", "http://i.imgur.com/C9pBVt7.jpg", "http://i.imgur.com/rT5vXE1.jpg", "http://i.imgur.com/aIy5R2k.jpg", "http://i.imgur.com/MoJs9pT.jpg", "http://i.imgur.com/S963yEM.jpg", "http://i.imgur.com/rLR2cyc.jpg", "http://i.imgur.com/SEPdUIx.jpg", "http://i.imgur.com/aC9OjaM.jpg", "http://i.imgur.com/76Jfv9b.jpg", "http://i.imgur.com/fUX7EIB.jpg", "http://i.imgur.com/syELajx.jpg", "http://i.imgur.com/COzBnru.jpg", "http://i.imgur.com/Z3QjilA.jpg", };
其次,我们需要建一个Activity测试一下Listview。
public class UsageExampleAdapter extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_usage_example_adapter); listView.setAdapter(new ImageListAdapter(UsageExampleAdapter.this, eatFoodyImages)); } }
第三,写一个ListView的每个Item的布局。
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp"/>
在看到效果之前,我们需要实现ListView的Adapter,来实现每个Item中有一张图片的效果,代码如下:
public class ImageListAdapter extends ArrayAdapter { private Context context; private LayoutInflater inflater; private String[] imageUrls; public ImageListAdapter(Context context, String[] imageUrls) { super(context, R.layout.listview_item_image, imageUrls); this.context = context; this.imageUrls = imageUrls; inflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView) { convertView = inflater.inflate(R.layout.listview_item_image, parent, false); } Picasso .with(context) .load(imageUrls[position]) .fit() // will explain later .into((ImageView) convertView); return convertView; } }
从上面的代码中你可以看到,Picasso加载图片主要发生在getView()这个方法中,Picasso类库的调用和之前的常规的代码的调用并没有什么不同。
作为一个高级的安卓开发者你应该知道,我们需要在listview中重用布局,这样可以使listview滑动起来更流畅。对于Picasso来说,当你取消请求的时候,清除ImageView的时候,它都会自动帮你处理。
(fit()这个方法你将会在接下来的教程中看到)
下面是效果图:
Picasso的一大优势:缓存
当你滑动列表或者下载了很多图片的时候,你将会看到图片比原来加载的速度更快了。正如你所猜想的:这些图片是从缓存中加载的而不是从网络上下载的。Picasso在图片缓存方面做得很好,所以你要做得事情变得很简单。缓存的大小取决于你的设备硬盘的大小。当加载一张图片的时候,Picasso可以使用三种资源:内存中的资源(memory),硬盘中的资源和网络上的资源。(加载速度由快到慢)。再重复一遍,这里没有什么是你需要做的。Picasso创建了一个合适的缓存大小,自动帮你做了这些事。当然,你可以改变或者替换掉缓存组件。在接下来的博客中,你可以看到关于这方面的详细描述。
GridView
Picasso在GridView上加载图片的方式和ListView没有什么不同。你只需要将ListView的控件替换成GridView的控件即可。其他控件:ImageView只是其中一个控件
到目前为止,我们的adapter中只有一个ImageView控件,你可以往adapter中加载其他的控件,这样你的getView方法可能看起来有点不同,但是Picasso得使用时不变的。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories