摘要
好像最近一个月都没有写博客了,正好伴着KJFrameForAndroid 更新v2.14版本,讲解一下其中Bitmap模块的深度用法。
首先介绍一下:KJBitmap是一个帮助Android开发者加载网络图片的类库。使用KJBitmap可以很方便的加载网络图片,而不用考虑对图片缓存以及OOM问题的处理(因为框架都帮你做好了)。
基础用法
最简单的加载方法是kjb.display(view, url);
其中kjb就是KJBitmap类的对象;
参数view可以代表任何View,对imageView设置它的src资源,对普通View会设置背景图片;
参数url就是这个图片的网络地址了,这里支持传一个网络地址如 https://www.kymjs.com/logo.png,同也支持一个SD卡路径比如/storage/sdcard0/logo.png
重载的显示方法
kjb.display(view, url, width, height);
这个方法可以加载指定大小的图片,比如我们有时候需要显示一个非常大的图片,但是手机的屏幕实际上是很小的,如果把整张图片都加载进来,不仅浪费内存而且加载速度很慢(但是消耗的流量是一样的,因为都需要把原图下载到本地) 其实如果是使用的单独加载一个控件是不需要用这个方法的,因为框架会自动获取到当前控件的宽高,并使用控件的宽高作为图片要显示的大小。但是还有一个问题就是如果控件还没有在屏幕上显示就调用加载逻辑,比如在Activity的onCreate()方法中调用display()方法;比如在ListView中调用display()方法;这些时候是获取不到控件的宽高的,框架默认会以当前屏幕大小的一半作为图片的大小加载,而如果你指定了这个大小,则会以指定大小显示。
kjb.display(view, url, loadimage);
很多时候,我们需要在图片加载的过程中先显示一个还没有加载出来的灰色图片,这个时候就可以使用这个方法。这里需要提的就是,KJBitmap非常先进,不会像ImageLoader框架一样造成图片闪烁问题。
使用配置器
网络图片的加载会自动将图片缓存在本地SD卡中,默认路径是/KJLibrary/image,当然,这个路径是你可以修改的。
BitmapConfig config = new BitmapConfig();
config.memoryCacheSize; //设置图片内存缓存空间大小,默认是手机内存的大小
config.diskCacheSize; // 设置图片SD卡缓存空间大小,默认40M
config.isDEBUG; //当前是否是调试模式,会打印一些调试log信息
//如下设置会将图片缓存到SD卡根目录的KJBitmap文件夹内的cache文件夹中
BitmapConfig.CACHEPATH = "KJBitmap/cache"; //这个就是我们图片缓存的路径了
最后别忘了,还有最重要的一步就是应用你的设置。
KJBitmap kjb = new KJBitmap(config);
自定义图片显示过程
在加载图片的过程中,还可以给一些酷炫的效果。比如让这张图片显示过程中添加一个动画,让图片从中心显示逐渐放大显示出来;比如让图片渐变,从模糊到清晰的显示;亦或者让图片显示时先显示一个环形进度条,等图片加载完成后再显示图片。这些自定义效果完全可行,你只需要在display()中调用Callback传入你的自定义加载过程就行了:
kjbitmap.display(vh.image, url, new BitmapCallBack() {
@Override
public void onPreLoad(View view) {
super.onPreLoad(view);
bar.setVisibility(View.VISIBLE);
}
@Override
public void onFinish(View view) {
super.onFinish(view);
bar.setVisibility(View.GONE);
}
@Override
public void onFailure(Exception arg0) {
Viewinjext.toast(R.string.tip_load_image_faile);
}
});
远不止这些
作为一个灵活的开放式框架,KJBitmap能做的当然不止这些,还支持:
//保存一张网络图片到本地
public void saveImage(String url, String path);
//对本地缓存的读写(包括删除)
public Bitmap getBitmapFromCache(String key);
public void removeCache(String key);
public void removeCacheAll();
更多的用法期待大家去发现,在使用过程中如果有不明白的函数方法,可以参考API文档