您的位置:首页 > 移动开发 > Android开发

Android 图片资源加载 简单框架

2013-12-24 13:48 381 查看
闲来无事,弄一个图片加载的框架。 希望各位看官多批评指教。

基本设计的想法是 开一个 阻塞线程,等待加载任务,有任务以后加载,然后回调通知,并且在缓存一份。

首先是大体结构的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: