[Android]異步加載圖片,內存緩存,文件緩存,imageview顯示圖片時增加淡入淡出動畫

這個可以實現ImageView異步加載圖片,內存緩存,文件緩存,imageview顯示圖片時增加淡入淡出動畫。

 

 

 

解決瞭:

 

1. listview加載oom問題

 

2. listview加載時卡頓的現象

 

3. listview加載時item中圖片重復錯位等情況

 

可以配置:

 

1. 設置加載圖片的最大尺寸

 

2. 設置默認圖片的顯示

 

3. 設置圖片位圖模式

 

4. 設置內存緩存的最大值。

 

5. 文件緩存保存的目錄

 

  這個框架基本的代碼是很久以前不知道哪裡弄的,零零碎碎的,現在已經優化瞭很多,所以現在上傳到github上共享。

 

  講講使用方式吧:

 

 

 

首先使用前下載源碼或者jar包(見github:https://github.com/wangjiegulu/ImageLoaderSample)

 

然後進行圖片加載器(ImageLoader)的配置和初始化,推薦的方法如下:

 

新建MyApplication類,繼承Application,在onCreate中增加如下代碼:

 

復制代碼

 1 /**

 2  * Created with IntelliJ IDEA.

 3  * Author: wangjie  email:tiantian.china.2@gmail.com

 4  * Date: 14-2-27

 5  * Time: 上午11:25

 6  */

 7 public class MyApplication extends Application{

 8     @Override

 9     public void onCreate() {

10         super.onCreate();

11         ImageLoader.init(getApplicationContext(),

12                 new CacheConfig()

13                     .setDefRequiredSize(600) // 設置默認的加載圖片尺寸(表示寬高任一不超過該值,默認是70px)

14                     .setDefaultResId(R.drawable.ic_launcher) // 設置顯示的默認圖片(默認是0,即空白圖片)

15                     .setBitmapConfig(Bitmap.Config.ARGB_8888) // 設置圖片位圖模式(默認是Bitmap.CacheConfig.ARGB_8888)

16                     .setMemoryCachelimit(Runtime.getRuntime().maxMemory() / 3) // 設置圖片內存緩存大小(默認是Runtime.getRuntime().maxMemory() / 4)

17 //                  .setFileCachePath(Environment.getExternalStorageDirectory().toString() + "/mycache") // 設置文件緩存保存目錄

18         );

19 

20     }

21 

22 

23     ……

24 }

復制代碼

 

 

然後再AndroidManifest.xml中添加:

 

<application

            ……

            android:name="MyApplication">

            ……

</application>

到此,配置已經全部完成:

 

接下來,使用ImageLoader來加載圖片:

 

復制代碼

 1 holder.progress.setText("0%");

 2     holder.progress.setVisibility(View.VISIBLE);

 3     final ViewHolder vhr = holder;

 4     ImageLoader.getInstances().displayImage(list.get(position), holder.image, new ImageLoader.OnImageLoaderListener() {

 5         @Override

 6         public void onProgressImageLoader(ImageView imageView, int currentSize, int totalSize) {

 7             vhr.progress.setText(currentSize * 100 / totalSize + "%");

 8         }

 9 

10         @Override

11         public void onFinishedImageLoader(ImageView imageView, Bitmap bitmap) {

12             vhr.progress.setVisibility(View.GONE);

13         }

14     });

15     或者:

16     ImageLoader.getInstances().displayImage(url, imageIv);

17     或者

18     ImageLoader.getInstances().displayImage(url, imageIv, 100);

發佈留言