开源项目之UniversalImageLoader(异步加载大量图片)
来源:互联网 发布:python 任务计划 编辑:程序博客网 时间:2024/06/05 17:59
UniversalImageLoader是实现异步加载大量图片的源码和例子,包括缓存、硬盘缓存、容错机制等技术。
项目如图:
测试效果如图:
总共有四种格式效果!
第一种ImageList,效果如图:
关键测试代码如下:
- public class ImageListActivity extends BaseActivity
- {
- private String[] imageUrls;
- private DisplayImageOptions options;
- @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()
- .showStubImage(R.drawable.stub_image).cacheInMemory()
- .cacheOnDisc().build();
- ListView listView = (ListView) findViewById(android.R.id.list);
- listView.setAdapter(new ItemAdapter());
- listView.setOnItemClickListener(new OnItemClickListener()
- {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id)
- {
- startImageGalleryActivity(position);
- }
- });
- }
- @Override
- protected void onStop()
- {
- imageLoader.stop();
- super.onStop();
- }
- private void startImageGalleryActivity(int position)
- {
- Intent intent = new Intent(this, ImagePagerActivity.class);
- intent.putExtra(Extra.IMAGES, imageUrls);
- intent.putExtra(Extra.IMAGE_POSITION, position);
- startActivity(intent);
- }
- class ItemAdapter extends BaseAdapter
- {
- private class ViewHolder
- {
- public TextView text;
- public ImageView image;
- }
- @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,
- null);
- 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);
- imageLoader
- .displayImage(imageUrls[position], holder.image, options);
- return view;
- }
- }
- }
第二种ImageGrid效果!如图:
测试关键代码如下:
- public class ImageGridActivity extends BaseActivity
- {
- private String[] imageUrls;
- private DisplayImageOptions options;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.ac_image_grid);
- Bundle bundle = getIntent().getExtras();
- imageUrls = bundle.getStringArray(Extra.IMAGES);
- options = new DisplayImageOptions.Builder()
- .showStubImage(R.drawable.stub_image)
- .showImageForEmptyUri(R.drawable.image_for_empty_url)
- .cacheInMemory().cacheOnDisc().build();
- GridView gridView = (GridView) findViewById(R.id.gridview);
- gridView.setAdapter(new ImageAdapter());
- gridView.setOnItemClickListener(new OnItemClickListener()
- {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id)
- {
- startImageGalleryActivity(position);
- }
- });
- }
- @Override
- protected void onStop()
- {
- imageLoader.stop();
- super.onStop();
- }
- private void startImageGalleryActivity(int position)
- {
- Intent intent = new Intent(this, ImagePagerActivity.class);
- intent.putExtra(Extra.IMAGES, imageUrls);
- intent.putExtra(Extra.IMAGE_POSITION, position);
- startActivity(intent);
- }
- public class ImageAdapter extends BaseAdapter
- {
- @Override
- public int getCount()
- {
- return imageUrls.length;
- }
- @Override
- public Object getItem(int position)
- {
- return null;
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- final ImageView imageView;
- if (convertView == null)
- {
- imageView = (ImageView) getLayoutInflater().inflate(
- R.layout.item_grid_image, parent, false);
- } else
- {
- imageView = (ImageView) convertView;
- }
- imageLoader.displayImage(imageUrls[position], imageView, options,
- new SimpleImageLoadingListener()
- {
- @Override
- public void onLoadingComplete()
- {
- Animation anim = AnimationUtils.loadAnimation(
- ImageGridActivity.this, R.anim.fade_in);
- imageView.setAnimation(anim);
- anim.start();
- }
- });
- return imageView;
- }
- }
- }
第三种ImagePager效果,如图:
测试关键实现如下:
- public class ImagePagerActivity extends BaseActivity
- {
- private ViewPager pager;
- private DisplayImageOptions options;
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.ac_image_pager);
- Bundle bundle = getIntent().getExtras();
- String[] imageUrls = bundle.getStringArray(Extra.IMAGES);
- int pagerPosition = bundle.getInt(Extra.IMAGE_POSITION, 0);
- options = new DisplayImageOptions.Builder()
- .showImageForEmptyUri(R.drawable.image_for_empty_url)
- .cacheOnDisc().imageScaleType(ImageScaleType.EXACT).build();
- pager = (ViewPager) findViewById(R.id.pager);
- pager.setAdapter(new ImagePagerAdapter(imageUrls));
- pager.setCurrentItem(pagerPosition);
- }
- @Override
- protected void onStop()
- {
- imageLoader.stop();
- super.onStop();
- }
- private class ImagePagerAdapter extends PagerAdapter
- {
- private String[] images;
- private LayoutInflater inflater;
- ImagePagerAdapter(String[] images)
- {
- this.images = images;
- inflater = getLayoutInflater();
- }
- @Override
- public void destroyItem(View container, int position, Object object)
- {
- ((ViewPager) container).removeView((View) object);
- }
- @Override
- public void finishUpdate(View container)
- {
- }
- @Override
- public int getCount()
- {
- return images.length;
- }
- @Override
- public Object instantiateItem(View view, int position)
- {
- final FrameLayout imageLayout = (FrameLayout) inflater.inflate(
- R.layout.item_pager_image, null);
- final ImageView imageView = (ImageView) imageLayout
- .findViewById(R.id.image);
- final ProgressBar spinner = (ProgressBar) imageLayout
- .findViewById(R.id.loading);
- imageLoader.displayImage(images[position], imageView, options,
- new ImageLoadingListener()
- {
- @Override
- public void onLoadingStarted()
- {
- spinner.setVisibility(View.VISIBLE);
- }
- @Override
- public void onLoadingFailed(FailReason failReason)
- {
- String message = null;
- switch (failReason)
- {
- case IO_ERROR:
- message = "Input/Output error";
- break;
- case OUT_OF_MEMORY:
- message = "Out Of Memory error";
- break;
- case UNKNOWN:
- message = "Unknown error";
- break;
- }
- Toast.makeText(ImagePagerActivity.this, message,
- Toast.LENGTH_SHORT).show();
- spinner.setVisibility(View.GONE);
- imageView
- .setImageResource(android.R.drawable.ic_delete);
- }
- @Override
- public void onLoadingComplete()
- {
- spinner.setVisibility(View.GONE);
- Animation anim = AnimationUtils.loadAnimation(
- ImagePagerActivity.this, R.anim.fade_in);
- imageView.setAnimation(anim);
- anim.start();
- }
- @Override
- public void onLoadingCancelled()
- {
- // Do nothing
- }
- });
- ((ViewPager) view).addView(imageLayout, 0);
- return imageLayout;
- }
- @Override
- public boolean isViewFromObject(View view, Object object)
- {
- return view.equals(object);
- }
- @Override
- public void restoreState(Parcelable state, ClassLoader loader)
- {
- }
- @Override
- public Parcelable saveState()
- {
- return null;
- }
- @Override
- public void startUpdate(View container)
- {
- }
- }
- }
第四种ImageGallery效果如图:
测试关键代码:
- public class ImageGalleryActivity extends BaseActivity
- {
- private Gallery gallery;
- private DisplayImageOptions options;
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.ac_image_gallery);
- Bundle bundle = getIntent().getExtras();
- String[] imageUrls = bundle.getStringArray(Extra.IMAGES);
- int galleryPosition = bundle.getInt(Extra.IMAGE_POSITION, 0);
- options = new DisplayImageOptions.Builder()
- .showImageForEmptyUri(R.drawable.image_for_empty_url)
- .showStubImage(R.drawable.stub_image).cacheInMemory()
- .cacheOnDisc().build();
- gallery = (Gallery) findViewById(R.id.gallery);
- gallery.setAdapter(new ImagePagerAdapter(imageUrls));
- gallery.setSelection(galleryPosition);
- }
- @Override
- protected void onStop()
- {
- imageLoader.stop();
- super.onStop();
- }
- private class ImagePagerAdapter extends BaseAdapter
- {
- private String[] images;
- private LayoutInflater inflater;
- ImagePagerAdapter(String[] images)
- {
- this.images = images;
- inflater = getLayoutInflater();
- }
- @Override
- public int getCount()
- {
- return images.length;
- }
- @Override
- public Object getItem(int position)
- {
- return position;
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent)
- {
- ImageView imageView = (ImageView) convertView;
- if (imageView == null)
- {
- imageView = (ImageView) inflater.inflate(
- R.layout.item_gallery_image, parent, false);
- }
- imageLoader.displayImage(images[position], imageView, options);
- return imageView;
- }
- }
- }
实例中通过imageLoader成员负责图片操作!初始化如下:
- protected ImageLoader imageLoader = ImageLoader.getInstance();
此处主要是围绕UniversalImageLoader使用的介绍!~代码不难。
学习的目标是成熟!~
项目下载
0 0
- 开源项目之UniversalImageLoader(异步加载大量图片)
- 开源项目之UniversalImageLoader(异步加载大量图片)
- 开源项目之UniversalImageLoader(异步加载大量图片)
- android平台UniversalImageLoader(异步加载大量图片
- UniversalImageLoader——异步加载图片
- 开源项目-图片异步加载之SDWebImage
- UniversalImageLoader图片加载
- 【安卓笔记】异步加载大量图片
- 【安卓笔记】异步加载大量图片
- 【Jacky's Note】浅析开源图片加载缓存框架-UniversalImageLoader(UIL)
- 开源框架com.nostra13.universalimageloader加载图片时抛出OUTOFMEMORY错误的处理方法
- 关于ios异步加载图片的几个开源项目
- 关于ios异步加载图片的几个开源项目
- 关于ios异步加载图片的几个开源项目
- 关于ios异步加载图片的三个开源项目
- 关于ios异步加载图片的几个开源项目
- Android-Universal-Image-Loader图片异步加载开源项目
- 关于ios异步加载图片的三个开源项目
- @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
- 网络流初步: 最大流
- http://www.pinterest.com/bolxbsdoiz/
- 关于汇编语言寄存器和指令操作的整理
- STL
- 开源项目之UniversalImageLoader(异步加载大量图片)
- CXF 客户端 远程调用WebService(笔记)
- SQL语句编写注重问题
- 如何从TS流中找到OC数据
- Oracle cursor_sharing 参数 详解
- JDK1.6 Runtime.getRuntime().exec(cmd)执行错误:Cannot allocate memory
- git 不是内部或外部命令,也不是可运行的程序 (Github)
- C语言中__inline函数作用解释
- memcached shell(start stop restart)