Android 图片资源加载 简单框架

闲来无事,弄一个图片加载的框架。 希望各位看官多批评指教。

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

首先是大体结构的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值