這篇文章將為大家詳細(xì)講解有關(guān)Android中如何使用Universal-Image-Loader圖片異步加載框架,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
10年積累的網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有臨渭區(qū)免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
Android-Universal-Image-Loader是一個圖片異步加載,緩存和顯示的框架。這個框架已經(jīng)被很多開發(fā)者所使用,是最常用的幾個Android開源項目之一,主流的應(yīng)用,隨便反編譯幾個,都可以見到它的身影。淘寶,天貓,F(xiàn)acebook,京東商城等都用到了這個項目。
該項目的Github地址鏈接
運行流程:
每一個圖片的加載和顯示任務(wù)都運行在獨立的線程中,除非這個圖片緩存在內(nèi)存中,這種情況下圖片會立即顯示。如果需要的圖片緩存在本地,它會開啟一個獨立的線程隊列。如果在緩存中沒有正確的圖片,任務(wù)線程會從網(wǎng)絡(luò)中獲取。
使用步驟:
1、加載圖片之前,先要做初始化配置,這個類似很多游戲引擎使用前要做一下初始化,其實只做了一件事,實例化一個全局的ImageLoader對象,同時傳入圖片加載緩存的配置,ImageLoaderConfiguration封裝了基本的配置信息,比如加載圖片事用的線程池大小,線程的優(yōu)先級,內(nèi)存緩存大小,是否支持同一圖片的多尺寸緩存(默認(rèn)是支持的,可以手動關(guān)閉),還有緩存的命名規(guī)則等等。
2、配置完后,就可以開始使用了,通過ImageLoader的displayImage()綁定一個圖片和ImageView。
displayImage(String uri, ImageView imageView, DisplayImageOptions options)
DisplayImageOptions用于指導(dǎo)每一個Imageloader根據(jù)網(wǎng)絡(luò)圖片的狀態(tài)(空白、下載錯誤、正在下載)顯示對應(yīng)的圖片,是否將緩存加載到磁盤上,下載完后對圖片進行怎么樣的處理。
實例:UniversalImageLoaderDemo
運行效果:
代碼清單:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.rainsong.universalimageloaderdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:name="com.rainsong.universalimageloaderdemo.UILApplication" android:allowBackup="true" android:icon="@drawable/logo" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.rainsong.universalimageloaderdemo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
布局文件:activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </LinearLayout>
布局文件:item_list.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/image" android:layout_width="72dip" android:layout_height="72dip" android:layout_margin="3dip" android:adjustViewBounds="true" android:contentDescription="@string/descr_image" android:scaleType="centerCrop" /> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="start|center_vertical" android:layout_marginLeft="20dip" android:textSize="22sp" /> </LinearLayout>
Java源代碼文件:UILApplication.java
package com.rainsong.universalimageloaderdemo; import java.io.File; import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache; import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.nostra13.universalimageloader.core.download.BaseImageDownloader; import com.nostra13.universalimageloader.utils.StorageUtils;import android.app.Application; import android.content.Context; public class UILApplication extends Application { @Override public void onCreate() { super.onCreate(); initImageLoader(getApplicationContext()); } public static void initImageLoader(Context context) { //緩存文件的目錄 File cacheDir = StorageUtils.getOwnCacheDirectory(context, "universalimageloader/Cache"); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每個緩存文件的最大長寬 .threadPoolSize(3) //線程池內(nèi)線程的數(shù)量 .threadPriority(Thread.NORM_PRIORITY - 2) .denyCacheImageMultipleSizesInMemory() .diskCacheFileNameGenerator(new Md5FileNameGenerator()) //將保存的時候的URI名稱用MD5 加密 .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) // 內(nèi)存緩存的最大值 .diskCacheSize(50 * 1024 * 1024) // SD卡緩存的最大值 .tasksProcessingOrder(QueueProcessingType.LIFO) // 由原先的discCache -> diskCache .diskCache(new UnlimitedDiscCache(cacheDir))//自定義緩存路徑 .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超時時間 .writeDebugLogs() // Remove for release app .build(); //全局初始化此配置 ImageLoader.getInstance().init(config); } }
Java源代碼文件:MainActivity.java
package com.rainsong.universalimageloaderdemo; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private ImageLoader imageLoader; private ListView lv; private String[] imageUrls; private DisplayImageOptions options; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageLoader = ImageLoader.getInstance(); lv = (ListView)findViewById(R.id.list); imageUrls = Constants.images; // 使用DisplayImageOptions.Builder()創(chuàng)建DisplayImageOptions options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_stub) // 設(shè)置圖片下載期間顯示的圖片 .showImageForEmptyUri(R.drawable.ic_empty) // 設(shè)置圖片Uri為空或是錯誤的時候顯示的圖片 .showImageOnFail(R.drawable.ic_error) // 設(shè)置圖片加載或解碼過程中發(fā)生錯誤顯示的圖片 .cacheInMemory(true) // 設(shè)置下載的圖片是否緩存在內(nèi)存中 .cacheOnDisk(true) // 設(shè)置下載的圖片是否緩存在SD卡中 .displayer(new RoundedBitmapDisplayer(20)) // 設(shè)置成圓角圖片 .build(); // 構(gòu)建完成 lv.setAdapter(new ItemListAdapter()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.item_clear_memory_cache: ImageLoader.getInstance().clearMemoryCache(); return true; case R.id.item_clear_disc_cache: ImageLoader.getInstance().clearDiskCache(); return true; default: return false; } } class ItemListAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return imageUrls.length; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return imageUrls[position]; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder = null; if (convertView == null) { convertView = getLayoutInflater().inflate(R.layout.item_list, parent, false); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); holder.image = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text.setText("Item " + (position + 1)); imageLoader.displayImage(imageUrls[position], holder.image, options); return convertView; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } class ViewHolder { public ImageView image; public TextView text; } } }
關(guān)于Android中如何使用Universal-Image-Loader圖片異步加載框架就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前名稱:Android中如何使用Universal-Image-Loader圖片異步加載框架
轉(zhuǎn)載源于:http://www.rwnh.cn/article32/ghdepc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、Google、做網(wǎng)站、軟件開發(fā)、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)