1. 程式人生 > >Android開發---AUIL圖片載入框架的使用

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"