BitmapCore 使用指南 ## 概述 ```RxVolley```是一个基于```Volley```的网络请求库; 同时支持```RxJava```; ```BitmapCore``` 是```RxVolley```的图片请求模块,具有更轻量的设计,整个包引入只多 13k,而且支持 Jpg/Png/Gif 等常用格式(gif需要使用框架内置控件) QQ问答群:1群 257053751(付费); 2群 201055521(付费); 3群 110775129(付费) *付费群,请带着问题来,闲聊者不建议随意加入,虽说不会踢人* ## 依赖 ```gradle compile 'com.kymjs.rxvolley:bitmapcore:1.1.3' ``` ## 简洁实现 ``` new BitmapCore.Builder() //View 支持一切 View,ImageView 设置src,普通 View 设置背景 .view(contentView) .url("http://kymjs.com/image/logo.jpg") .doTask(); /** * 从本地SD卡加载图片(可直接传路径) */ public void testBitmapWithDiskLoader() { new BitmapCore.Builder() .url(FileUtils.getSDCardPath() + File.separator + "request.png") .view(contentView) .loadResId(R.mipmap.ic_launcher) .errorResId(R.mipmap.ic_launcher) .doTask(); } /** * 使用并行模式访问本地图片(默认为串行) */ public void testBitmapWithDiskLoader2() { new BitmapCore.Builder() .url(FileUtils.getSDCardPath() + File.separator + "request.png") .view(contentView) .loadResId(R.mipmap.ic_launcher) .errorResId(R.mipmap.ic_launcher) //并行访问本地图片 .useAsyncLoadDiskImage(true) .doTask(); } ``` ## 自定义图片加载过程 ``` callback = new HttpCallback() { @Override public void onPreStart() { Loger.debug("=====加载之前回调"); } //访问网络之前会回调 @Override public void onPreHttp() { super.onPreHttp(); //仅在请求网络图片时回调(如果本地有图片磁盘缓存,也不会回调) Loger.debug("=====做网络请求之前回调"); } //仅在Bitmap回调有效 @Override public void onSuccess(Map<String, String> headers, Bitmap bitmap) { super.onSuccess(headers, bitmap); //注意重载的方法(本方法仅在请求图片时会回调) Loger.debug("=====图片加载成功成功回调"); } @Override public void onFailure(int errorNo, String strMsg) { super.onFailure(errorNo, strMsg); Loger.debug("=====图片加载出错回调"); } @Override public void onFinish() { super.onFinish(); Loger.debug("=====请求完成回调,不论成功还是失败"); } }; new BitmapCore.Builder() //View 支持一切 View,ImageView 设置src,普通 View 设置背景 .view(contentView) .url("http://kymjs.com/image/logo.jpg") .callback(callback).doTask(); ``` ## 更多可选设置 ## 访问缓存 ```BitmapCore``` 支持直接访问内存缓存的图片,(这个用处是巨大的,比如你可以在 RecyclerView 滚动的时候只显示内存缓存的图片,滚动停止后才去加载网络图片): ``` //若不存在内存缓存,返回为null Bitmap bitmap = BitmapCore.getMemoryBitmap(url); ``` ###设置图片文件缓存的路径(同RxVolley) 默认的文件缓存路径是在SD卡根目录的 /RxVolley 文件夹下,你可以通过如下语句设置你的 cacheFolder ``` RxVolley.setRequestQueue(RequestQueue.newRequestQueue(cacheFolder)); ``` 需要注意的是,setRequestQueue 方法必须在 BitmapCore.Build() 和 RxVolley.Build() 方法执行之前调用,也就是在使用 RxVolley 以前先设置配置信息。建议在 Application 类中完成这些设置。 ### Https设置(同RxVolley) 如果不设置,默认信任全部的https证书。可以传入自定义 ```SSLSocketFactory``` ```java RxVolley.setRequestQueue(RequestQueue.newRequestQueue(cacheFolder), new HttpConnectStack(null, sslSocketFactory)); ``` 需要注意的是,setRequestQueue 方法必须在 RxVolley.Build() 方法执行之前调用,也就是在使用 RxVolley 以前先设置配置信息。建议在 Application 类中完成这些设置。 一个自定义设置SSLSocketFactory的相关示例: ```java //下载的证书放到项目中的assets目录中 InputStream ins = context.getAssets().open("app_pay.cer"); CertificateFactory cerFactory = CertificateFactory .getInstance("X.509"); Certificate cer = cerFactory.generateCertificate(ins); KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC"); keyStore.load(null, null); keyStore.setCertificateEntry("trust", cer); SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore); RxVolley.setRequestQueue(RequestQueue.newRequestQueue(RxVolley.CACHE_FOLDER), new HttpConnectStack(null, sslSocketFactory)); ``` ###Build()中的可选设置 * 详细请参阅 BitmapCore$Builder 类中代码。 ```java //如果请求的图片是私密数据,需要添加 header 时使用 putHeader(String k, String v) //使用并行访问本地图片 useAsyncLoadDiskImage(boolean useAsync) //显示图片的最大宽高,若图片高于这个值则压缩,否则不作处理 size(int w, int h) //请求超时时间 timeout() //为了更真实的模拟网络,如果读取缓存,延迟一段时间再返回缓存内容 delayTime() //使用服务器控制的缓存有效期,即cookie有效期 //(如果使用服务器端控制,则无视#cacheTime()) useServerControl() //是否缓存这张图片(默认缓存) shouldCache() //重连策略,Volley默认的重连策略是timeout=3000,重试1次 retryPolicy() ```