Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> ImageLoader,androidimageloader

ImageLoader,androidimageloader

編輯:關於android開發

ImageLoader,androidimageloader


1.准備工作

1)導入universal-image-loader-1.9.5.jar到項目中

2)創建MyApplication繼承Application,在oncreate()中初始化ImageLoader

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        initImageLoader(this);
    }

    // 初始化imageloader
    private void initImageLoader(Context context) {
        // 初始化參數
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPriority(Thread.NORM_PRIORITY - 2)               // 線程優先級
                .denyCacheImageMultipleSizesInMemory()                  // 當同一個Uri獲取不同大小的圖片,緩存到內存時,只緩存一個。默認會緩存多個不同的大小的相同圖片
                .discCacheFileNameGenerator(new Md5FileNameGenerator()) // 將保存的時候的URI名稱用MD5
                .tasksProcessingOrder(QueueProcessingType.LIFO)         // 設置圖片下載和顯示的工作隊列排序
                .writeDebugLogs()                                       // 打印debug log
                .build();

        // 全局初始化此配置
        ImageLoader.getInstance().init(config);
    }
}

 

2.ImageLoader_Listview中使用

5)初始化DisplayImageOptions
6)獲取ImageLoader實例
7)顯示加載的圖片

public class ImageloaderListviewAdapter extends BaseAdapter {
    private Context mContext;
    private final ImageLoader imageLoader;
    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.atguigu_logo)          // 設置圖片下載期間顯示的圖片
            .showImageForEmptyUri(R.drawable.atguigu_logo)  // 設置圖片Uri為空或是錯誤的時候顯示的圖片
            .showImageOnFail(R.drawable.atguigu_logo)       // 設置圖片加載或解碼過程中發生錯誤顯示的圖片
            .cacheInMemory(true)                        // 設置下載的圖片是否緩存在內存中
            .cacheOnDisk(true)                          // 設置下載的圖片是否緩存在SD卡中
            .displayer(new RoundedBitmapDisplayer(20))  // 設置成圓角圖片
            .build();                                   // 創建配置過得DisplayImageOption對象;

    public ImageloaderListviewAdapter(Context context) {
        mContext = context;

        // 初始化imageloader
        imageLoader = ImageLoader.getInstance();
    }

    @Override
    public int getCount() {
        return Constants.IMAGES.length;
    }

    @Override
    public Object getItem(int position) {
        return Constants.IMAGES[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Viewholder holder;
        if(convertView == null) {
            convertView = View.inflate(mContext, R.layout.item_imageloader_listview, null);
            holder = new Viewholder(convertView);
            convertView.setTag(holder);
        }else {
            holder = (Viewholder) convertView.getTag();
        }
        holder.name.setText("item"+(position + 1));

        imageLoader.displayImage(Constants.IMAGES[position],holder.iv,options);

        return convertView;
    }

    class Viewholder{
        @Bind(R.id.iv_imageloader_listview)
        ImageView iv;

        @Bind(R.id.tv_imageloader_name)
        TextView name;

        public Viewholder(View view) {
            ButterKnife.bind(this,view);
        }
    }
}

  

3.ImageLoader_在ViewPager中使用

public class ImageloaderViewpagerAdapter extends PagerAdapter {

    private Context mContext;
    private final ImageLoader imageLoader;
    private DisplayImageOptions options = new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.atguigu_logo)  // 設置圖片Uri為空或是錯誤的時候顯示的圖片
            .showImageOnFail(R.drawable.atguigu_logo)       // 設置圖片加載或解碼過程中發生錯誤顯示的圖片
            .resetViewBeforeLoading(true)               // 設置圖片在下載前是否重置,復位
            .cacheOnDisc(true)                          // 設置下載的圖片是否緩存在SD卡中
            .imageScaleType(ImageScaleType.EXACTLY)     // 設置圖片以如何的編碼方式顯示
            .bitmapConfig(Bitmap.Config.RGB_565)        // 設置圖片的解碼類型
            .displayer(new FadeInBitmapDisplayer(300))  // 設置圖片漸變顯示
            .build();
    ;

    public ImageloaderViewpagerAdapter(Context context) {
        mContext = context;

        // 初始化Imageloader
        imageLoader = ImageLoader.getInstance();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // 添加布局文件
        View view = View.inflate(mContext, R.layout.item_imageloader_viewpager, null);

        // 獲取控件對象
        ImageView iv = (ImageView) view.findViewById(R.id.iv_imageloader_viewpager);

        // 顯示圖片
        imageLoader.displayImage(Constants.IMAGES[position], iv, options);

        ((ViewPager) container).addView(view, 0);

        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((View) object);
    }

    @Override
    public int getCount() {
        return Constants.IMAGES.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }
}

 

3.ImageLoader 內存溢出解決辦法

1)減少線程池中線程的個數,在ImageLoaderConfiguration中的(.threadPoolSize)中配置,推薦配置1-5。
2)在DisplayImageOptions選項中配置bitmapConfig為Bitmap.Config.RGB_565,因為默認是ARGB_8888, 使用RGB_565會比使用ARGB_8888少消耗2倍的內存。
3)在ImageLoaderConfiguration中配置圖片的內存緩存為memoryCache(new WeakMemoryCache()) 或者不使用內存緩存。
4)在DisplayImageOptions選項中設置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY)。

  

  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved