成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android Studio中用List Fragments創建相冊Gallery

移動開發 Android
本文講解了在 Android Studio 中如何通過 List Fragments 創建一個以縮略圖整列展示設備中圖片的相冊應用。

這是關于在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/

責任編輯:閆佳明 來源: blog.jobbole
相關推薦

2013-07-23 07:03:51

Android開發學習Gallery實現3DAndroid源碼下載

2011-07-19 17:15:29

iPhone App

2010-01-28 17:07:03

Android Gal

2010-10-18 13:16:24

GalleryAndroid

2013-06-25 11:21:35

Android開發幻燈片效果Gallery

2009-11-13 10:12:37

Visual Stud

2011-04-11 10:20:53

Oracle

2021-07-30 18:35:10

JavaScript 模塊代碼

2012-06-08 09:28:15

EclipseScalaAndroid

2009-04-13 11:31:55

IBMdWWebService

2016-11-21 16:23:24

Android StGoogle

2017-03-02 10:30:57

AndroidAndroid Stu技巧

2013-05-17 10:48:40

GoogleAndroid Stu

2013-05-21 10:17:28

GoogleAndroid Stu

2014-06-24 10:34:08

Android Stu教程

2014-07-01 11:18:37

Android Stu問題匯總

2014-07-14 10:54:13

Android Stu

2020-03-09 09:07:51

Vue根節點Fragments

2022-11-07 08:42:50

iOS 16SwiftUI

2013-06-08 13:02:11

Android開發XML解析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产视频一区二区 | 中国免费黄色片 | 亚洲福利在线观看 | 欧美日韩国产在线观看 | 五月精品视频 | 国产精品一区二区三区四区 | 欧美一区二区三区 | 国产高清在线观看 | 午夜精品一区二区三区在线观看 | 国产高潮av | www.v888av.com| 成人欧美日韩一区二区三区 | 99在线视频观看 | 91精品久久久久久久久中文字幕 | 中文字字幕一区二区三区四区五区 | 精品一区在线免费观看 | 午夜a√ | 欧美一区二区三区一在线观看 | 成人黄色电影免费 | 精品综合久久久 | 亚洲色欲色欲www | 精品一区二区三区不卡 | 欧洲视频一区 | 欧美福利久久 | 91成人免费看片 | 国产视频二区 | 五月激情婷婷网 | 日日骚视频 | www.久久久久久久久 | 午夜一区二区三区在线观看 | 操皮视频 | 黄一级| 亚洲天堂色 | 国产精品久久免费观看 | 亚洲视频一区二区三区 | 成人免费视频在线观看 | 一区二区三区av | 国产精品国产精品国产专区不片 | 请别相信他免费喜剧电影在线观看 | 久久性色 | 国产一区二区三区 |