Android開發---AUIL圖片載入框架的使用
AUIL圖片載入框架
使用步驟
注意:要顯示imageloader的圓角效果 imageview必須固定寬高
1.匯入jar包
universal-image-loader.jar第一個就可以了
2.新增許可權
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:name=".MyApplication"
3.新增Application(並且在清單檔案註冊)
---------------------------------------Application配置(常規必寫)---------------------------------------------
public class MyApplicationextends Application {
@Override
public void onCreate() {
//執行全域性設定(遭遇任何的imageLoader的呼叫)
//建立預設的ImageLoader配置引數
//ImageLoaderConfigurationconfiguration = ImageLoaderConfiguration.createDefault(this);
//Initialize Imageloader withconfiguration
//ImageLoader.getInstance().init(configuration);
ImageLoaderConfigurationconfig=
newImageLoaderConfiguration.Builder(getApplicationContext())
.threadPriority(Thread.NORM_PRIORITY- 2)//執行緒的優先級別,有限避免oom
.denyCacheImageMultipleSizesInMemory()//拒絕不同的快取大小
.diskCacheFileNameGenerator(newMd5FileNameGenerator())//對臨時檔名加密
.diskCacheSize(50 *1024 * 1024) // 50 Mb SDCard上的快取空間
.tasksProcessingOrder(QueueProcessingType.LIFO)//任務佇列採取LIFO
.writeDebugLogs()//除錯日誌-可在專案釋出時刪除
.build();// 構建配置
ImageLoader.getInstance().init(config);
}
}
<application
android:name=".application.MyApplication"
4.設定
//宣告監聽器
private ImageLoadingListeneranimateFirstListener = new AnimateFirstDisplayListener();
//宣告設定類
private DisplayImageOptionsoptions;
public ListAdapter(Contextcontext) {
this.inflater =LayoutInflater.from(context);
-------------------------------------------ImageLoader選項(常規必寫)-------------------------------------------
// 圖片具體配置
options=new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)// 載入時
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_empty)
.resetViewBeforeLoading(true)//在載入前重置View
.cacheInMemory(false)
.cacheOnDisk(true)
.considerExifParams(true)
//.displayer(newFadeInBitmapDisplayer(1000))// 淡入特效時//.displayer(newCircleBitmapDisplayer(Color.WHITE, 5))// 圓形特效
.build();
}
// 設定圖片顯示的具體引數
// 圖片的顯示設定(選項)
DisplayImageOptions options = newDisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)// 載入時的圖示
.showImageForEmptyUri(R.drawable.ic_error)//地址錯誤時的圖示
.showImageOnFail(R.drawable.ic_empty)//載入失敗的圖示
//.resetViewBeforeLoading(true)// 在載入前重置View
.cacheInMemory(false)// 把它關上,可以避免OOM
.cacheOnDisk(true)// 在SDCard上快取
.imageScaleType(ImageScaleType.EXACTLY)//拉伸型別:確切拉伸,避免OOM
.bitmapConfig(Bitmap.Config.RGB_565)//圖片的解碼格式ARGB_8888(透明),ARGB_4444,RGB_565避免OOM
.considerExifParams(true)// 考慮JPEG的旋轉
.displayer(newFadeInBitmapDisplayer(1000))// 淡入特效時間
//.displayer(newRoundedBitmapDisplayer(50))// 圓角矩形,引數=弧度
.displayer(newRoundedVignetteBitmapDisplayer(50,10))// 圓角矩形
.build();
5.顯示圖片
(1)URI規範:
String uri = "http://site.com/image.png";// 圖片來自網路
String uri ="file:///mnt/sdcard/image.png"; // 圖片來自 SD card
String uri ="content://media/audio/album/13"; // 圖片來自 content provider
String uri = "assets://image.png";// 圖片來自 assets資料夾
String uri = "drawable://" +R.drawable.image; // 圖片來自 drawable資料夾
(2)引數型別
ImageLoader.getInstance().displayImage(
uri, //URI
imageView,//要顯示圖片的控制元件
options, //[ 設定 ]
listener, //[ 監聽器1 ]
progressListener //[ 監聽器2 ]
)
ImageLoader.getInstance().displayImage(
//URI
java.lang.String uri,
//要顯示圖片的控制元件
android.widget.ImageView imageView,
//[ 設定 ]
com.nostra13.universalimageloader.core.DisplayImageOptions options,
//[ 監聽器 1 ]
com.nostra13.universalimageloader.core.listener.ImageLoadingListene
r listener,
//[ 監聽器 2 ]
com.nostra13.universalimageloader.core.listener.ImageLoadingProgres
sListener progressListener
)
6.示例
1.
ImageLoader.getInstance().displayImage(map.get("uri"),holder.logo, options, new SimpleImageLoadingListener() {
@Override
public voidonLoadingStarted(String imageUri, View view) {
holder.progressBar.setProgress(0);
holder.progressBar.setVisibility(View.VISIBLE);
holder.progressBar.setBackgroundColor(Color.RED);
LinearLayout.LayoutParamsparams = new LinearLayout.LayoutParams(10, 30);
holder.box.setLayoutParams(params);
}
@Override
public voidonLoadingFailed(String imageUri, View view, FailReason failReason) {
holder.progressBar.setVisibility(View.GONE);
}
@Override
public voidonLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
holder.progressBar.setVisibility(View.GONE);//下載完成取消進度條
holder.box.setVisibility(View.GONE);
}
}, new ImageLoadingProgressListener() {
//進行監聽下載進度
@Override
public void onProgressUpdate(StringimageUri, View view, int current, int total) {
int pro = Math.round(100.0f *current / total);
holder.progressBar.setProgress(pro);
LinearLayout.LayoutParamsparams = new LinearLayout.LayoutParams(10 * pro, 30);
holder.box.setLayoutParams(params);
Log.i("wxs",imageUri + ":" + pro);
}
});
2.監聽器
private staticclass AnimateFirstDisplayListener extends SimpleImageLoadingListener {
static finalList<String> displayedImages = Collections.synchronizedList(newLinkedList<String>());
@Override
public voidonLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
if (loadedImage != null) {
ImageView imageView =(ImageView) view;
boolean firstDisplay =!displayedImages.contains(imageUri);
if (firstDisplay) {
FadeInBitmapDisplayer.animate(imageView,1500);
displayedImages.add(imageUri);
}
}
}
}
7.必選項封裝的方法
(1)Util
/**
* ImageLoader的全域性引數配置
*
* @param context
*/
public static voidinitLoader(Context context) {
// ImageLoader的全域性引數配置 建造者模式
ImageLoaderConfiguration config = new
ImageLoaderConfiguration.Builder(context)
.threadPriority(Thread.NORM_PRIORITY - 2)// 執行緒的優先級別
.denyCacheImageMultipleSizesInMemory() // 拒絕不同的快取大小
.diskCacheFileNameGenerator(newMd5FileNameGenerator())// 對臨時檔名加密
.diskCacheSize(50 * 1024 *1024) // 50 Mb SDCard上的快取空間
.tasksProcessingOrder(QueueProcessingType.LIFO)// 任務佇列採取LIFO
.writeDebugLogs() //除錯日誌-可在專案釋出時刪除
.build();// 構建配置
//初始化ImageLoader 單例模式
ImageLoader.getInstance().init(config);
}
/**
* 圖片顯示選項的設定
*
* @return
*/
public staticDisplayImageOptions getImageOption() {
DisplayImageOptions options = newDisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)
.showImageForEmptyUri(R.drawable.ic_empty)
.showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
//.displayer(newCircleBitmapDisplayer(Color.WHITE, 5))//圓形特效
.build();
return options;
}
(2)Application
publicclass MyApplication extends Application {
@Override
public voidonCreate() {
super.onCreate();
//ImageLoader的全域性引數配置 建造者模式
Utils.initLoader(getApplicationContext());
}
}
<application
android:name=".MyApplication"