Android 이미지 비동기 로드 프레임 워 크 Android-Universal-Image-Loader
이 항목 의Github 주소 링크
실행 프로 세 스:
모든 그림 의 불 러 오기 와 디 스 플레이 작업 은 독립 된 스 레 드 에서 실 행 됩 니 다.이 그림 캐 시 를 메모리 에 저장 하지 않 는 한 그림 이 바로 표 시 됩 니 다.필요 한 그림 캐 시가 로 컬 에 있 으 면 독립 된 스 레 드 대기 열 을 엽 니 다.캐 시 에 올 바른 그림 이 없 으 면 작업 스 레 드 는 네트워크 에서 가 져 옵 니 다.
사용 절차:
1.그림 을 불 러 오기 전에 초기 화 설정 을 해 야 합 니 다.이것 은 많은 게임 엔진 이 사용 하기 전에 초기 화 를 해 야 합 니 다.사실은 한 가지 일 만 했 습 니 다.전체적인 ImageLoader 대상 을 예화 하 는 동시에 그림 으로 캐 시 를 불 러 오 는 설정 을 들 어 옵 니 다.ImageLoader Configuration 은 그림 을 불 러 오 는 데 사용 되 는 스 레 드 풀 크기,스 레 드 의 우선 순위 등 기본 적 인 설정 정 보 를 봉 했 습 니 다.메모리 캐 시 크기,같은 그림 의 다 중 크기 캐 시 를 지원 하 는 지 여부(기본 값 은 지원 되 며 수 동 으로 닫 을 수 있 습 니 다),캐 시 이름 규칙 등 이 있 습 니 다.
2.설정 이 완료 되면 사용 할 수 있 습 니 다.ImageLoader 의 display Image()를 통 해 그림 과 ImageView 를 연결 합 니 다.
displayImage(String uri, ImageView imageView, DisplayImageOptions options)
DisplayImageOptions 는 모든 Imageloader 가 네트워크 그림 의 상태(공백,다운로드 오류,다운로드 중)에 따라 해당 하 는 그림 을 표시 하 는 지,캐 시 를 디스크 에 불 러 올 지,다운로드 가 끝 난 후에 그림 을 어떻게 처리 하 는 지 지도 하 는 데 사 용 됩 니 다.
인 스 턴 스: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>
레이아웃 파일:activitymain.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>
레이아웃 파일:itemlist.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>
자바 소스 파일: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) //
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator()) // URI MD5
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024) //
.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() DisplayImageOptions
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub) //
.showImageForEmptyUri(R.drawable.ic_empty) // Uri
.showImageOnFail(R.drawable.ic_error) //
.cacheInMemory(true) //
.cacheOnDisk(true) // SD
.displayer(new RoundedBitmapDisplayer(20)) //
.build(); //
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;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.