Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android圖片緩存框架Android-Universal-Image-Loader(二)

android圖片緩存框架Android-Universal-Image-Loader(二)

編輯:關於Android編程

這篇打算直接告訴大家怎麼用吧,其實這個也不是很難的框架,大致使用過程如下:

	// 獲取緩存圖片目錄
		File cacheDir = StorageUtils.getOwnCacheDirectory(activity,
				"imageloader/Cache");

		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				activity).memoryCacheExtraOptions(800, 760)
				// 保存每個緩存圖片的最大長和寬
				.threadPoolSize(3)
				.diskCache(new UnlimitedDiscCache(cacheDir))
				// 線程池的大小 這個其實默認就是3
				.memoryCacheSize(2 * 1024)
				// 設置緩存的最大字節
				.denyCacheImageMultipleSizesInMemory()
				// 緩存顯示不同大小的同一張圖片
				.imageDownloader(
						new BaseImageDownloader(activity, 5 * 1000, 30 * 1000)) // connectTimeout
				// s)超時時間
				.build();
		imageLoader.init(config);

上面設置的目錄在我手機的/storage/sdcard0/imageloader/Cache中文件是沒有.jpg或者.png結尾的,是一堆無格式的文件,可以通過擴展名導出打開

第二步設置顯示圖片選項:

DisplayImageOptionsoptions = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_launcher)//設置圖片在下載期間顯示的圖片  
.showImageForEmptyUri(R.drawable.ic_launcher)//設置圖片Uri為空或是錯誤的時候顯示的圖片  
.showImageOnFail(R.drawable.ic_launcher)//設置圖片加載/解碼過程中錯誤時候顯示的圖片
.cacheInMemory(true)//設置下載的圖片是否緩存在內存中  
.cacheOnDisk(true)//設置下載的圖片是否緩存在SD卡中  
.displayer(new FadeInBitmapDisplayer(100))
.considerExifParams(true)
.displayer(new FadeInBitmapDisplayer(100))// 圖片加載好後漸入的動畫時間
.displayer(new RoundedBitmapDisplayer(1)).build();//這個一定要設置,不設置的話會導致圖片不能夠鋪滿整個控件,這個是設置圓角效果的,如果大家不喜歡圓角可以設置為1幾乎沒有什麼效果



通過上面的代碼就可以正常使用了

下面是官方給的一個列子,會android看看下面的這個代碼應該就知道怎麼使用了吧,非常簡單

public class ImageListActivity extends AbsListViewBaseActivity {

	DisplayImageOptions options;

	String[] imageUrls;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ac_image_list);

		Bundle bundle = getIntent().getExtras();
		imageUrls = bundle.getStringArray(Extra.IMAGES);

		options = new DisplayImageOptions.Builder()
			.showImageOnLoading(R.drawable.ic_stub)
			.showImageForEmptyUri(R.drawable.ic_empty)
			.showImageOnFail(R.drawable.ic_error)
			.cacheInMemory(true)
			.cacheOnDisk(true)
			.considerExifParams(true)
			.displayer(new RoundedBitmapDisplayer(20))
			.build();

		listView = (ListView) findViewById(android.R.id.list);
		((ListView) listView).setAdapter(new ItemAdapter());
		listView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView parent, View view, int position, long id) {
				startImagePagerActivity(position);
			}
		});
	}

//注意下這裡,當按下返回鍵的時候清除一下在內存中的圖片,大家不過要過度依賴自動內存管理,有些時候還是手動去清除掉內存比較好,
	@Override
	public void onBackPressed() {
		AnimateFirstDisplayListener.displayedImages.clear();
		super.onBackPressed();
	}

	private void startImagePagerActivity(int position) {
		Intent intent = new Intent(this, ImagePagerActivity.class);
		intent.putExtra(Extra.IMAGES, imageUrls);
		intent.putExtra(Extra.IMAGE_POSITION, position);
		startActivity(intent);
	}

	private static class ViewHolder {
		TextView text;
		ImageView image;
	}

	class ItemAdapter extends BaseAdapter {

		private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();

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

		@Override
		public Object getItem(int position) {
			return position;
		}

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

		@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			View view = convertView;
			final ViewHolder holder;
			if (convertView == null) {
				view = getLayoutInflater().inflate(R.layout.item_list_image, parent, false);
				holder = new ViewHolder();
				holder.text = (TextView) view.findViewById(R.id.text);
				holder.image = (ImageView) view.findViewById(R.id.image);
				view.setTag(holder);
			} else {
				holder = (ViewHolder) view.getTag();
			}

			holder.text.setText("Item " + (position + 1));

			imageLoader.displayImage(imageUrls[position], holder.image, options, animateFirstListener);

			return view;
		}
	}

	private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

		static final List displayedImages = Collections.synchronizedList(new LinkedList());

		@Override
		public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
			if (loadedImage != null) {
				ImageView imageView = (ImageView) view;
				boolean firstDisplay = !displayedImages.contains(imageUri);
				if (firstDisplay) {
					FadeInBitmapDisplayer.animate(imageView, 500);
					displayedImages.add(imageUri);
				}
			}
		}
	}
}


這是一個demo,這個圖片選項最好配置成一個單列類,便於管理和減少內存的溢出。

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