Android 图片资源加载 简单框架
2013-12-24 13:48
381 查看
闲来无事,弄一个图片加载的框架。 希望各位看官多批评指教。
基本设计的想法是 开一个 阻塞线程,等待加载任务,有任务以后加载,然后回调通知,并且在缓存一份。
首先是大体结构的UML 类图:
实现的想法:
BitmapLoader 内有一个线程,在无任务时候阻塞,当添加新任务后唤醒线程,执行BaseMission的load()方法。
当load()方法加载完返回Bitmap,并且通过IUpdate更新相应视图,或者缓存等。
通过工厂生成Mission实例。
工厂代码:
Demo:
Activity 的 onCreate方法:
Updater :
HandlerCallback :
jar 下载:http://download.csdn.net/download/deathswing/6762187
demo 下载:http://download.csdn.net/detail/deathswing/6762323
基本设计的想法是 开一个 阻塞线程,等待加载任务,有任务以后加载,然后回调通知,并且在缓存一份。
首先是大体结构的UML 类图:
实现的想法:
BitmapLoader 内有一个线程,在无任务时候阻塞,当添加新任务后唤醒线程,执行BaseMission的load()方法。
当load()方法加载完返回Bitmap,并且通过IUpdate更新相应视图,或者缓存等。
通过工厂生成Mission实例。
工厂代码:
public class MissionFactory { // 从assets读 public static BaseMission createMission(String mark, IUpdate cb, String fn, Context ctx){ BaseMission mission = new AssetsMission(mark, cb, fn, ctx); return mission ; } // 从sd卡读 public static BaseMission createMission(String mark, IUpdate cb, String uri){ BaseMission mission = new SimpleSDMission(mark, cb, uri); return mission ; } // 从sd卡 读,并且自动缩放 public static BaseMission createMission(String mark, IUpdate cb, String uri, int w, int h){ BaseMission mission = new AdvSDMission(mark, cb, uri, w, h); return mission ; } }
Demo:
Activity 的 onCreate方法:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/pic/3.jpg" ; mHandler = new Handler(getMainLooper(), new HandlerCallback()); testImageView = (ImageView) findViewById(R.id.iv_test); // 展示用的视图 cb = new Updater(); //IUpdater 的实例 testImageView.post(new Runnable() { @Override public void run() { mHandler.sendEmptyMessage(0); } }); }
Updater :
class Updater implements IUpdate{ @Override public void update(String mark, final Bitmap bm) { testImageView.post(new Runnable() { @Override public void run() { testImageView.setImageBitmap(bm); Random rnd = new Random(); int type = rnd.nextInt(3); mHandler.sendEmptyMessageDelayed(type, 1000); } }); } }
HandlerCallback :
class HandlerCallback implements Handler.Callback{ @Override public boolean handleMessage(Message msg) { BaseMission mission ; switch (msg.what) { case 0: mission = MissionFactory.createMission("my", cb, "1.jpg", TestActivity.this); // Assets目录下的图片 break; case 1: mission = MissionFactory.createMission("test", cb, path); break; case 2: mission = MissionFactory.createMission("test3", cb, path, 100, 100); break; default: mission = MissionFactory.createMission("my", cb, "1.jpg", TestActivity.this); break; } BitmapLoader.getInstance().addMission(mission); return true; } }
jar 下载:http://download.csdn.net/download/deathswing/6762187
demo 下载:http://download.csdn.net/detail/deathswing/6762323
相关文章推荐
- 【Android】图片资源的加载、简单处理
- Android强大的图片加载框架Fresco简单用法
- Android 中网络图片加载(包括本地图片的加载) 框架 universal image loader 的简单使用
- Android图片加载框架,Glide的简单用法
- 设计简单的Android图片加载框架
- Android图片加载框架Glide的简单用法
- Android 图片加载框架Glide的简单用法
- android Volley请求框架的简单使用——访问网络和加载图片
- Android最好用、最强大的图片加载框架:Fresco的简单实用教程
- Android图片加载框架 Universal-Image-Loader 妙用
- Android图片加载框架Glide用法
- Android图片加载框架最全解析(四),玩转Glide的回调与监听
- Android图片加载框架ImageLoader框架的坑
- 网络图片加载的封装【从零开始搭建android框架系列(4)】
- Android之ListView异步加载网络图片(优化缓存机制)和对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存
- Android广告图片轮播控件,支持无限循环和5种主题,可以灵活设置轮播样式、时间、位置、图片加载框架等!
- Android广告图片轮播控件,支持无限循环和5种主题,可以灵活设置轮播样式、时间、位置、图片加载框架等!
- Android Glide图片加载框架详解
- Android图片加载框架
- 推荐Android中两个很好用的banner,可无限轮播,可使用第三方图片加载框架加载网络图