您好,欢迎来到61ic! | [登录] [注册] 忘记密码 | 设为首页 帮助
 . 网站首页 . 业界新闻 . 设计中心 . 移动技术 . TI专栏 . ADI专栏 . FPGA专栏 . 代码工厂 . 官方商城 . 
 . 活动专区 . 新品快递 . 解决方案 . 前沿科技 . TI资源 . ADI资源 . FPGA资源 . 下载中心 . 产品展示 . 
加入收藏
付款方式
联系我们
您现在的位置: 61IC电子在线 >> 移动技术 >> Android >> 正文
  Android Studio中用List Fragments创建相册Gallery           ★★★ 【字体:
Android Studio中用List Fragments创建相册Gallery
作者:blog.job…    文章来源:blog.jobbole    点击数:    更新时间:2014-7-10    

这是关于在Android Studio中通过 fragments 进行相机方面开发的五篇系列文章的第二篇。如果你还没有把我放在 GitHub 上的范例程序克隆下来,那么请先去这里获取最新代码。本文主要包含的是 “SimplePhotoGalleryListFragment” 这个 Fragment。

注意:本范例中所涉及的 List Fragment 的用法,可以在 list fragments 这篇文章中找到详细的讲解。

AsyncTaskLoaders 以及 Fragments

加载整个图片库到List是一个运算量比较密集,强度很高任务。因此,我们希望利用 Android 提供的AsyncTaskLoader 通过异步加载解决这个问题。在这里,我已经写好了一个自定义AsyncTaskLoader工具类用加载图库中图片的。我把它命名为:PhotoGalleryImageProvider,可以在源码中找到。

Fragments 提供了一种特殊的接口给异步任务的 Loader 以便于自动触发异步加载任务。我们的图库列表在Fragment中看起来如下面的代码:

  1. @Override 
  2. public void onCreate(Bundle savedInstanceState) { 
  3.     super.onCreate(savedInstanceState); 
  4.   
  5.     // Create an empty loader and pre-initialize the photo list items as an empty list. 
  6.     Context context = getActivity().getBaseContext(); 
  7.   
  8.     // Set up empty mAdapter 
  9.     mPhotoListItem = new ArrayList() ; 
  10.     mAdapter = new PhotoAdapter(context, 
  11.             R.layout.photo_item, 
  12.             mPhotoListItem, false); 
  13.   
  14.     // Prepare the loader.  Either re-connect with an existing one, 
  15.     // or start a new one. 
  16.     getLoaderManager().initLoader(0nullthis); 

请注意最后的这一行:

  1. getLoaderManager().initLoader(0nullthis); 

这一行的作用就是自动启用 AsyncLoader。AsyncLoader的相关代码放在这个Class文件的后面。

  1. /** 
  2.  * Loader Handlers for loading the photos in the background. 
  3.  */ 
  4. @Override 
  5. public Loader<List> onCreateLoader(int id, Bundle args) { 
  6.     // This is called when a new Loader needs to be created.  This 
  7.     // sample only has one Loader with no arguments, so it is simple. 
  8.     return new PhotoGalleryAsyncLoader(getActivity()); 

每次后台任务成功获取到图库中的图片时,则会回调下面这个函数:

  1. @Override 
  2. public void onLoadFinished(Loader<List> loader, List data) { 
  3.     // Set the new data in the mAdapter. 
  4.     mPhotoListItem.clear(); 
  5.   
  6.     for(int i = 0; i < data.size();i++){ 
  7.         PhotoItem item = data.get(i); 
  8.         mPhotoListItem.add(item); 
  9.     } 
  10.   
  11.     mAdapter.notifyDataSetChanged(); 
  12.     resolveEmptyText(); 
  13.     cancelProgressDialog(); 

其中,PhotoItem(用作给 Adapter 存储数据)的数组包含了指向所有图库中图片的缩略图以及全尺寸图片的URL。一旦获取这些数据,Adapter必定会通过 “notifyDataSetChanged” 回调来通知出去,从而刷新当前的图片列表。

通过游标(cursor)来获取缩略图

之前我提到过,我已经提供了一个工具类可以用游标方便的去获取图库中图片的缩略图,这个工具类叫做“PhotoGalleryImageProvider”。这个类的主要用法如下:

  1. /** 
  2.      * Fetch both full sized images and thumbnails via a single query. 
  3.      * Returns all images not in the Camera Roll. 
  4.      * @param context 
  5.      * @return 
  6.      */ 
  7.     public static List getAlbumThumbnails(Context context){ 
  8.   
  9.         final String[] projection = {MediaStore.Images.Thumbnails.DATA,MediaStore.Images.Thumbnails.IMAGE_ID}; 
  10.   
  11.         Cursor thumbnailsCursor = context.getContentResolver().query( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
  12.                 projection, // Which columns to return 
  13.                 null,       // Return all rows 
  14.                 null
  15.                 null); 
  16.         ... 
  17.   
  18.         return result; 
  19.     } 

直接用Android 提供的Cursors 去后台获取图片是比较简单的一种用法。另一种高级的用法则是使用 CursorLoader 来操作Cursor。CursorLoader 内建了一个 AsyncTaskLoader 可以用来自动处理后台的加载进程。由于需要同时渲染获取到图片的缩略图和完整尺寸的图片,所以尽管使用带有CursorLoader的AsyncTask 也可以得到同样的结果,但我还是选择了写一个自定义的Task Loader。

除了这些必须了解的内容,你现在可以获取范例代码然后好好享受学习的旅程了!

相关连接

原文链接:airpair   翻译:zerob13

译文链接:http://blog.jobbole.com/73138/

文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    Android摇晃刷新实用教程
    高效开发Android App的10个建…
    让你明白,Android常用组件四…
    Android消息推送完美解决方案…
    3分钟可运行起来的开源 Andr…
    Android SDK上手指南:知识测…
    Android 5.0将成为下一个里程…
    在Android中使用RxJava创建R…
    Android开发进阶:使用依赖注…
    Android开发者必备的42个链接
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61 湘ICP备13001086号-2